在哪个线程中运行 AsyncTask?

应用程序的 AlertDialog.Builder(context) 中有下面的代码。问题是在哪个线程中运行呢?

final Thread myPrettyOperation = new Thread() {
    @Override
    public void run() {
        //Do some really long operation.
    }
};
class MyPrettyTask extends
        AsyncTask<Void, Integer, Boolean> {
    protected Boolean doInBackground(
            Void... voids) {
        myPrettyOperation.start();
        return true;
    }
    protected void onProgressUpdate(
            Integer... progress) {
    }
    protected void onPostExecute(Boolean result) {
    }
}
new MyPrettyTask().execute();

运行应用程序,然后检查 logcat 输出。线程名分别是 "Thread1:", "Thread2:", "Thread3:",当你在输出中看见 "main" ,就是指你的 UI 线程。在其它情况下,你会看见线程的名字,例如: 是 myPrettyOperation 里是"Thread14"。

 final Thread myPrettyOperation = new Thread() {
    @Override
    public void run() {
        Log.i("YOUR_TAG", "Thread1: "+ Thread.currentThread().getName()); 
        //Do some really long operation.
    }
};
class MyPrettyTask extends
        AsyncTask<Void, Integer, Boolean> {
    protected Boolean doInBackground(
            Void... voids) {
        Log.i("YOUR_TAG", "Thread2: "+ Thread.currentThread().getName()); 
        myPrettyOperation.start();
        return true;
    }
    protected void onProgressUpdate(
            Integer... progress) {
    }
    protected void onPostExecute(Boolean result) {
    }
}
new MyPrettyTask().execute();
Log.i("YOUR_TAG", "Thread3: "+ Thread.currentThread().getName()); 

在你的代码中包含 3 个线程,
run()方法中的代码会在 myPrettyOperation 里的线程中运行。
"myPrettyOperation.start(); return true;"这一行会在一个 AsyncTask 系统的线程中运行。
剩余的代码在 UI 线程中运行。