异步任务的下方如果有的话

时间:2016-12-06 12:08:38

标签: android performance android-asynctask

我知道你在AsnycTask中使用非UI代码很好,但我只是想知道在使用AsyntTask时是否存在任何问题?我没有任何产生问题的代码。但是我很想知道如果你有AsnycTask并希望分享它会有任何糟糕的经历。

3 个答案:

答案 0 :(得分:3)

  1. 内存泄漏:
  2. 即使活动被破坏,AsyncTask也会保存Activity的引用,因为它必须使用回调方法更新UI。

    1. 取消AsyncTask:
    2. 使用cancel()取消AsyncTask API不会确保任务立即停止。

      1. 数据丢失:
      2. 完成屏幕方向时。活动被销毁并重新创建,因此AsysncTask将保留活动的无效引用,并且在更新UI时会遇到麻烦。

答案 1 :(得分:2)

  • 并发AsyncTasks:打开Asynctask.java转到行号 199 ,它显示您只能创建128个并发任务 private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);
  • 轮换:重新启动Activity时,AsyncTaskActivity的引用不再有效,因此onPostExecute()将有没有效果。
  • 取消AsyncTasks :如果您AsyncTask.cancel()它未取消AsyncTask。由你来检查AsyncTask是否已被取消。
  • 生命周期: AsyncTask未与ActivityFragment相关联,因此您必须管理AsyncTask的取消。

有一些解决方法可以解决上述问题,有关详细信息,请查看The Hidden Pitfalls of AsyncTask

答案 2 :(得分:1)

我只想分享这些信息,如果你使用的是Asynctask,即使活动不存在,它也会继续工作。 因此,如果你有asynctask从活动的onCreate()开始,你旋转设备。在每次轮换时,都会使用Asysntask的新实例创建一个新活动。如此多的请求将通过网络发送以执行相同的任务。这样,将消耗大量内存,这会影响应用程序性能,从而导致崩溃。所以要处理它使用Loaders(Asynctask Loaders)。 有关更多信息,请查看视频: Loaders