2 znl 12 znl_12 于 2013.02.21 16:46 提问

在哪个线程中运行 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();

2个回答

nana4ever
nana4ever   2013.02.21 17:51
已采纳

运行应用程序,然后检查 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()); 
LiDaming_and
LiDaming_and   2013.02.27 10:35

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!