在onPostExecution之后,Android不会终止ASyncTask线程

时间:2012-01-09 17:48:03

标签: android multithreading android-asynctask

我的应用程序中有一个ASyncTask实例,用于将用户登录到应用程序,问题是当ASyncTask执行“onPostExecution”函数时,ASyncTask线程仍然“正在运行”(如图所示) Eclipse Debugger)。 onPostExecution仅修改UI组件,并且(在成功登录的情况下),启动一个新活动。

如何终止线程?

3 个答案:

答案 0 :(得分:5)

为了执行AsyncTask,Android使用线程池,以便自动回收所有Thread个对象。所以没有必要手动杀死线程

对于此作业,AsyncTask中有两个静态字段:SERIAL_EXECUTORTHREAD_POOL_EXECUTORExecutor的实例在您致电asyncTask.execute(Params... params)时使用。< / p>

如果您需要更多控制权,可以使用替代方法asyncTask.executeOnExecutor(Executor exec, Params... params)指定另一个Executor实例 - 例如,您可以使用Executors.newSingleThreadExecutor()为您提供ExecutorService实例。通过这种方式,您可以“关闭”ExecutorService,最终破坏所有线程,调用方法executor.shutdown()

答案 1 :(得分:1)

是否有任何特殊原因需要线程终止?通常你会允许系统处理这个,但根据我的经验,一旦你使用AsyncTask它的线程等待执行另一个AsyncTask

答案 2 :(得分:0)

只需检查应用程序中正在运行的线程

如果你的项目是在java应用程序中:

int active = Thread.activeCount();
System.out.println("currently active threads: "+active);
Thread all[] = new Thread[active];
Thread.enumerate(all);
for (int i = 0; i < active; i++) {
    System.out.println(i + ": " + all[i]);
}

如果你使用android项目应用程序:

String run="";
int active =Thread.activeCount();
System.out.println("currently active threads: " + active);
Thread all[] = new Thread[active];
Thread.enumerate(all);

for (int i = 0; i < active; i++) {
    run+=all[i]+"\n";
}
// declare the EditText in your main thread
edittext.setText(run);