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 DownloadTaskAsyncTask. 的直接子 class AsyncTask 提供了一种以异步方式管理任务的实现,而您不需要无需担心有关线程池或任何其他细节的任何细节。 AsyncTask class 使用 Java 泛型,即具有三个参数的模板。您正在使用 String 作为模板的第一个和第三个参数,因此这意味着 doInBackground 将采用 String 个对象的变体数量,并且它将 return 个 String 个对象。 execute方法和doInBackground之间的"connection"在AsyncTaskclass里面,隐藏在父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]);
            ...
        }
    }