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

用于长时间运行的Android AsyncTask

用于长时间运行的Android AsyncTask

莫回无 2019-09-19 08:51:40
引用此处的 AsyncTask文档,它说:理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)如果需要保持线程长时间运行,强烈建议您使用java.util.concurrent pacakge提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。现在我的问题出现了:为什么?该doInBackground()函数运行在UI线程中,因此在这里进行长时间运行有什么危害?
查看完整描述

3 回答

?
一只名叫tom的猫

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

为什么?

因为AsyncTask,默认情况下,使用您未创建的线程池。永远不要从未创建的池中占用资源,因为您不知道该池的要求是什么。如果该池的文档告诉您不要,那么永远不要从您未创建的池中占用资源,就像这里的情况一样。

特别是,从Android 3.2开始,AsyncTask默认情况下使用的线程池(对于android:targetSdkVersion设置为13或更高的应用程序)只有一个线程 - 如果你无限期地占用这个线程,你的其他任务都不会运行。


查看完整回答
反对 回复 2019-09-19
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

Aysnc任务是专门的线程,仍然可以与您的应用程序GUI一起使用,但同时保持UI线程的资源繁重的任务。因此,当更新列表,更改视图等内容需要您执行一些获取操作或更新操作时,您应该使用异步任务,以便您可以将这些操作保留在UI线程之外,但请注意这些操作仍以某种方式连接到UI 。

对于不需要UI更新的长时间运行的任务,您可以使用服务,因为即使没有UI,它们也可以存在。

因此,对于简短任务,请使用异步任务,因为它们可能会在您的产生活动终止后被操作系统杀死(通常不会在操作中死亡但将完成其任务)。对于漫长而重复的任务,请改用服务。

有关更多信息,请参阅主题:

AsyncTask的时间超过几秒?

即使活动已经销毁,AsyncTask也不会停止


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 406 浏览

添加回答

举报

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