适用于长时间运行的Android AsyncTask是怎样的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

引用在这里找到的AsyncTask的文档:

理想情况下,AsyncTasks应该用于短操作(最多几秒)。如果您需要保持线程长时间运行,强烈建议您使用java.util.concurrent pacakge提供的各种API,例如执行器,ThreadPoolExecutor和FutureTask。

提问于
用户回答回答于

这是一个非常好的问题,作为一名Android程序员需要时间来充分理解这个问题。的确,AsyncTask有两个相关的主要问题:

  • 他们与活动生命周期的关系很差
  • 他们很容易造成内存泄漏。

AsyncTask和Activity生命周期:

AsyncTasks不遵循活动实例的生命周期。如果你在一个Activity中启动一个AsyncTask并且你旋转了这个设备,那么这个Activity将被销毁并且一个新的实例将被创建。但AsyncTask不会死。它会继续活着直到完成。

完成后,AsyncTask将不会更新新Activity的UI。事实上,它更新了以前不再显示的活动实例。这可能会导致java.lang.IllegalArgumentException类型的异常:如果您使用findViewById检索Activity中的视图,则视图不会附加到窗口管理器。

用户回答回答于

因为AsyncTask默认情况下会使用你没有创建的线程池。永远不要捆绑你没有创建的池中的资源,因为你不知道池的要求是什么。如果该池的文档告诉你不要这样做,那么不要将池中的资源捆绑在一起,因为这种情况就是这样。

扫码关注云+社区