引用此处的 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或更高的应用程序)只有一个线程 - 如果你无限期地占用这个线程,你的其他任务都不会运行。
白猪掌柜的
TA贡献1893条经验 获得超10个赞
Aysnc任务是专门的线程,仍然可以与您的应用程序GUI一起使用,但同时保持UI线程的资源繁重的任务。因此,当更新列表,更改视图等内容需要您执行一些获取操作或更新操作时,您应该使用异步任务,以便您可以将这些操作保留在UI线程之外,但请注意这些操作仍以某种方式连接到UI 。
对于不需要UI更新的长时间运行的任务,您可以使用服务,因为即使没有UI,它们也可以存在。
因此,对于简短任务,请使用异步任务,因为它们可能会在您的产生活动终止后被操作系统杀死(通常不会在操作中死亡但将完成其任务)。对于漫长而重复的任务,请改用服务。
有关更多信息,请参阅主题:
和
- 3 回答
- 0 关注
- 406 浏览
添加回答
举报
0/150
提交
取消