应用程序的 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 线程中运行。