我希望在应用程序中有各种异步线程,比如,大约5-10个线程,用于后台任务,这些任务可以是、长时间运行的(比如流),如果需要的话,我还要更新UI以发布一些结果。
据我所知,AsyncTask在以下方面存在问题:
因此,我正在寻找一种替代方案(可能不使用任何第三方库),它不存在上述问题。
我应该更好地使用简单的Java线程吗?我不介意使用它们,因为它们不会给AsynTask带来任何问题。
发布于 2017-02-01 04:51:12
在大多数情况下,AsyncTask
应该能够满足需求。但是,有些情况下不能使用AsyncTask
。ie AsyncTask
管理线程池,从中提取要由任务实例使用的线程。现在,线程池假设在一段合理的时间后,它们将返回它们的线程。因此,在不知道需要线程多长时间的场景中,您不能使用AsyncTask
。而在Android4.4中,线程池的大小只能增长到:(no of CPU cores * 2) + 1
。因此,在双核处理器上,可以创建的最大线程数限制在5个。
因此,我正在寻找一种替代方案(可能不使用任何第三方库),它不存在上述问题。
谈到AsyncTask
的替代方案,以下是可用的选项:
现在,所有背景线程都有缺点,不管它们的插图有多漂亮,但很少包括:
java.util.concurrent
有许多类可以帮助。AsyncTask
或更简单的Thread
不同,Service
或IntentService
将是理想的选择。简而言之:无论你选择哪一个选项,你都需要手动处理所有的角落案例,这样应用程序才能高效而出色地工作。
PS:引文:Android开发繁忙的程序员指南v5.8 by @Commonsware,它是在非商业共享许可下发布的
发布于 2017-02-01 04:32:14
发布于 2017-02-01 06:07:06
我首先建议使用上述组件,
如果操作是长时间运行的,那么您可以选择服务,因为它一直在运行。你说过
它可以长时间运行(比如流)
如果您正在播放一些音频或视频,那么最好根据您的需求使用普通的Service
或Intent Service
服务。
您可以在需要时销毁该服务,也可以在需要时让Android系统进行销毁。
因此,我建议您在这种情况下使用服务。
https://stackoverflow.com/questions/41971777
复制相似问题