Android: AsyncTask中的execute()方法是如何工作的?
Android: how does the execute() method in AsyncTask work?
所以我目前正在学习 Android 中的 AsyncTask 并且有以下简单示例:
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
...
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask task = new DownloadTask();
String result = null;
try {
result = task.execute("http://someURL").get();
} catch (Exception e) {
e.printStackTrace();
}
Log.i("Result",result);
}
}
关于这个例子,我唯一不明白的是:
在 try
部分中,有一个字符串被传递给 execute
方法。 execute
方法是 task
对象的一部分。 doInBackground
方法也是 task
对象的一部分。 doInBackground
方法如何知道我传递给 execute
方法的内容?因为在教程中我了解到,url = new URL(urls[0]);
包含通过 execute
方法传递的字符串的信息。有人可以向我解释一下这种联系吗?
class DownloadTask
是 AsyncTask.
的直接子 class AsyncTask
提供了一种以异步方式管理任务的实现,而您不需要无需担心有关线程池或任何其他细节的任何细节。 AsyncTask
class 使用 Java 泛型,即具有三个参数的模板。您正在使用 String 作为模板的第一个和第三个参数,因此这意味着 doInBackground 将采用 String
个对象的变体数量,并且它将 return 个 String
个对象。 execute方法和doInBackground
之间的"connection"在AsyncTask
class里面,隐藏在父class里面,是面向对象中通常进行的封装和信息隐藏设计。
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
...
}
}
所以我目前正在学习 Android 中的 AsyncTask 并且有以下简单示例:
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
...
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask task = new DownloadTask();
String result = null;
try {
result = task.execute("http://someURL").get();
} catch (Exception e) {
e.printStackTrace();
}
Log.i("Result",result);
}
}
关于这个例子,我唯一不明白的是:
在 try
部分中,有一个字符串被传递给 execute
方法。 execute
方法是 task
对象的一部分。 doInBackground
方法也是 task
对象的一部分。 doInBackground
方法如何知道我传递给 execute
方法的内容?因为在教程中我了解到,url = new URL(urls[0]);
包含通过 execute
方法传递的字符串的信息。有人可以向我解释一下这种联系吗?
class DownloadTask
是 AsyncTask.
的直接子 class AsyncTask
提供了一种以异步方式管理任务的实现,而您不需要无需担心有关线程池或任何其他细节的任何细节。 AsyncTask
class 使用 Java 泛型,即具有三个参数的模板。您正在使用 String 作为模板的第一个和第三个参数,因此这意味着 doInBackground 将采用 String
个对象的变体数量,并且它将 return 个 String
个对象。 execute方法和doInBackground
之间的"connection"在AsyncTask
class里面,隐藏在父class里面,是面向对象中通常进行的封装和信息隐藏设计。
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
...
}
}