我的应用程序中有一个ASyncTask实例,用于将用户登录到应用程序,问题是当ASyncTask执行“onPostExecution”函数时,ASyncTask线程仍然“正在运行”(如图所示) Eclipse Debugger)。 onPostExecution仅修改UI组件,并且(在成功登录的情况下),启动一个新活动。
如何终止线程?
答案 0 :(得分:5)
为了执行AsyncTask
,Android使用线程池,以便自动回收所有Thread
个对象。所以没有必要手动杀死线程。
对于此作业,AsyncTask
中有两个静态字段:SERIAL_EXECUTOR
和THREAD_POOL_EXECUTOR
,Executor
的实例在您致电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);