我在我的应用程序中的AsyncTask的实例,它是用于在用户登录到应用程序,问题是,当作为的AsyncTask执行了“onPostExecution”功能,该线程的AsyncTask仍然“运行”(如Eclipse调试器中所示)。 onPostExecution只修改UI组件和(在成功登录的情况下),开始一个新的活动。Android不终止的AsyncTask线后onPostExecution
我怎样才能终止线程?
我在我的应用程序中的AsyncTask的实例,它是用于在用户登录到应用程序,问题是,当作为的AsyncTask执行了“onPostExecution”功能,该线程的AsyncTask仍然“运行”(如Eclipse调试器中所示)。 onPostExecution只修改UI组件和(在成功登录的情况下),开始一个新的活动。Android不终止的AsyncTask线后onPostExecution
我怎样才能终止线程?
是否有你需要的线程终止什么特别的原因?通常情况下,您可以让系统处理这个问题,但根据我的经验,一旦您使用AsyncTask
,它的线程就会等待执行另一个AsyncTask
。
我有不同的活动使用新的AsyncTask对象,所以创建了这些线程的堆栈,但大多数不会使用多次。 – 2012-01-09 18:14:04
不用担心,系统运行正常。他们现有的线程被保存在内存中,以防止创建另一个线程。 (根据我的经验,每个应用程序最多3个)请放心,任务正在完成,但仍留在以防万一再次需要。 – 2012-01-09 21:41:50
为了执行AsyncTask
,Android使用线程池因此所有Thread
对象都会自动回收。所以没有必要手动杀死线程。
对于这项工作有在AsyncTask
两个静态字段:当你打电话asyncTask.execute(Params... params)
使用的Executor
SERIAL_EXECUTOR
和THREAD_POOL_EXECUTOR
,实例。
如果你需要更多的控制,你可以使用另一种方法asyncTask.executeOnExecutor(Executor exec, Params... params)
指定另一个Executor
实例 - 例如,你可以使用Executors.newSingleThreadExecutor()
,给你一个ExecutorService
实例。通过这种方式,您可以“关闭”ExecutorService
,最终销毁所有线程,并调用方法executor.shutdown()
。
这些字段SERIAL_EXECUTOR和THREAD_POOL_EXECUTOR以及方法executeOnExecutor()仅在API 11 + .is上面提供,有没有针对小于11的api版本的解决方法? – Ads 2012-06-07 08:08:24
只是检查正在运行的线程应用程序中的
如果你的项目是在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]);
}
如果[R采用了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);
这是多还是少[这篇文章]的副本(http://stackoverflow.com/questions/8407408/asynctask-keeps-waiting/8407518#8407518)。 – kabuko 2012-01-09 18:51:03