用于长时间运行操作的Android异步任务
引用找到的AsyncTask的文档,它说: AsyncTasks最好用于短期操作(最多几秒钟)。如果您需要让线程长时间运行,强烈建议您使用java.util.concurrent pacakge提供的各种API,如Executor、ThreadPoolExecutor和FutureTask用于长时间运行操作的Android异步任务,android,android-asynctask,Android,Android Asynctask,引用找到的AsyncTask的文档,它说: AsyncTasks最好用于短期操作(最多几秒钟)。如果您需要让线程长时间运行,强烈建议您使用java.util.concurrent pacakge提供的各种API,如Executor、ThreadPoolExecutor和FutureTask 现在我的问题出现了:为什么?doInBackground()函数在UI线程外运行,因此在这里长时间运行操作有什么危害 Aysnc任务是专门的线程,它仍将与应用程序GUI一起使用,但同时保留UI线程的资源繁重任
现在我的问题出现了:为什么?
doInBackground()
函数在UI线程外运行,因此在这里长时间运行操作有什么危害 Aysnc任务是专门的线程,它仍将与应用程序GUI一起使用,但同时保留UI线程的资源繁重任务。因此,当更新列表、更改视图等需要执行一些获取操作或更新操作时,您应该使用异步任务,这样您就可以使这些操作远离UI线程,但请注意,这些操作仍然以某种方式连接到UI
对于不需要UI更新的长时间运行的任务,您可以使用服务,因为它们甚至可以在没有UI的情况下生存
因此,对于短任务,请使用异步任务,因为它们可能在生成活动结束后被操作系统杀死(通常不会在操作过程中结束,但会完成其任务)。对于长时间重复的任务,使用服务代替
有关更多信息,请参见线程:
及
Aysnc任务是专门的线程,它仍将与应用程序GUI一起使用,但同时保留UI线程的资源繁重任务。因此,当更新列表、更改视图等需要执行一些获取操作或更新操作时,您应该使用异步任务,这样您就可以使这些操作远离UI线程,但请注意,这些操作仍然以某种方式连接到UI 对于不需要UI更新的长时间运行的任务,您可以使用服务,因为它们甚至可以在没有UI的情况下生存 因此,对于短任务,请使用异步任务,因为它们可能在生成活动结束后被操作系统杀死(通常不会在操作过程中结束,但会完成其任务)。对于长时间重复的任务,使用服务代替 有关更多信息,请参见线程: 及 为什么? 因为默认情况下,
AsyncTask
使用的线程池不是您创建的。永远不要占用您未创建的池中的资源,因为您不知道该池的需求是什么。而且,如果某个池的文档告诉您不要这样做,那么千万不要占用您未创建的池中的资源,这里就是这种情况
特别是,从Android 3.2开始,默认情况下AsyncTask
使用的线程池(对于Android:targetSdkVersion
设置为13或更高版本的应用程序)中只有一个线程——如果无限期地绑定此线程,则其他任务都不会运行
为什么?
因为默认情况下,AsyncTask
使用的线程池不是您创建的。永远不要占用您未创建的池中的资源,因为您不知道该池的需求是什么。而且,如果某个池的文档告诉您不要这样做,那么千万不要占用您未创建的池中的资源,这里就是这种情况
特别是,从Android 3.2开始,默认情况下,
AsyncTask
使用的线程池(适用于Android:targetSdkVersion
设置为13或更高版本的应用程序)中只有一个线程——如果无限期地绑定此线程,则其他任务都不会运行。这是一个非常好的问题,作为一名Android程序员,完全理解这个问题需要时间。实际上,AsyncTask有两个相关的主要问题:
- 它们与活动生命周期的联系很差
- 它们很容易造成内存泄漏
在长时间运行的操作中使用AsyncTasks确实是一个非常糟糕的主意。尽管如此,对于短时间的视图(例如在1或2秒钟后更新视图)来说,它们还是可以的 我鼓励您下载,它真正深入地解释了这一点,并提供了示例和演示