假设我在我的应用程序的AlertDialog.Builder(context)
中有此代码。问题是它会运行Thread
吗?
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();
答案 0 :(得分:1)
这取决于您发布的代码的哪些部分。您的代码中涉及3个主题。
显然,run()的主体将在你为myPrettyOperation创建的线程中运行。
行“myPrettyOperation.start();返回true;”将在系统中为AsyncTask从线程池分配的线程中运行。
其余代码将在UI线程上运行(即在主线程上)应用。
答案 1 :(得分:1)
由于您在评论中对Vipul Shah的回复中提出了其他问题,我将在此处回答(需要代码块)。你的问题是:
你确定吗? [是否全部在UI线程上运行] 我该如何进行更多调查?
我在下面发布了代码块。
注意我注入代码的Log.i调用。运行您的应用程序,并检查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());
答案 2 :(得分:0)
说我在我的AlertDialog.Builder(context)中有这个代码 应用
它将始终在UI线程上运行