为了账号安全,请及时绑定邮箱和手机立即绑定

AsyncTask线程永不消亡

AsyncTask线程永不消亡

慕田峪9158850 2019-11-08 10:53:42
我正在使用AsyncTasks来获取数据,以响应用户按下按钮。这样可以很好地工作,并在获取数据时保持接口的响应速度,但是当我检查Eclipse调试器中发生的情况时,我发现每次AsyncTask创建新程序时(这很常见,因为它们只能使用一次),正在创建一个新线程,但从未终止。结果就是大量AsyncTask线程坐在那里。我不确定这在实践中是否存在问题,但是我真的很想摆脱那些多余的线程。如何杀死这些线程?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

AsyncTask管理使用创建的线程池ThreadPoolExecutor。它将具有5到128个线程。如果有5个以上的线程,那么这些多余的线程将最多保留10秒钟,然后再将其删除。(注意:这些数字是针对当前可见的开放源代码,并且因Android版本而异)。

请不要理会AsyncTask线程。


查看完整回答
反对 回复 2019-11-08
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

目前,我正在使用Android 2.2,并且我的应用程序随时都使用不超过一个AsyncTask,但是我每隔X分钟创建一个新的AsyncTask。最初,新的AsyncTask线程开始出现(新的AsyncTask的新线程),但是在5个线程(如CommonsWare所述)之后,它们仅在调试窗口中可见,并在需要新的AsyncTask线程时重新使用。他们只是呆在那里,直到调试器断开连接。


查看完整回答
反对 回复 2019-11-08
?
MYYA

TA贡献1868条经验 获得超4个赞

使用ThreadPoolExecutor。


BlockingQueue workQueue= new LinkedBlockingQueue<Runnable>(100); // Work pool size

ThreadPoolExecutor executor = new ThreadPoolExecutor(

            Runtime.getRuntime().availableProcessors(),       // Initial pool size

            Runtime.getRuntime().availableProcessors(),       // Max pool size

            1, // KEEP_ALIVE_TIME

            TimeUnit.SECONDS, //  KEEP_ALIVE_TIME_UNIT

            workQueue);

Runnable使用execute()方法发布任务 。


void execute (Runnable command)

在将来的某个时间执行给定的任务。该任务可以在新线程或现有池线程中执行



查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 329 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信