2016-12-06 58 views
0

我知道您在AsnycTask中使用非UI代码的情况非常好,但我只是想知道在使用AsyntTask时是否有任何问题?我没有任何产生问题的代码。但我只是想知道如果你有AsnycTask并希望分享它,那么任何不好的经历。异步任务如果有任何问题

回答

1

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

+0

它可以通过在'的onDestroy取消你'Asynctask'()来解决' –

2
  1. 内存泄漏:

即使活性被破坏,持有的AsyncTask活动的参考,因为它有回调方法来更新UI。

  • 消除的AsyncTask:
  • 使用取消消除的AsyncTask()API将不确保任务将立即停止。

  • 数据丢失:
  • 当屏幕取向完成。活动被破坏并重新创建,因此AsysncTask将持有无效的活动引用,并且在更新UI时会遇到麻烦。

    +0

    您应该使用的WeakReference''作为在'AsyncTask'中调用'Activity'引用并重写'onCancelled()',调用'AsyncTask'。在'Activity'或'Fragment'的'onDestroy()'内部取消(true)',然后清除活动引用并取消你的'WeakReference '对象。 –

    +0

    感谢@HarisQureshi获取有用的信息。 – Vinodh

    2
    • 并发AsyncTasks:打开Asynctask.java转到行数,这表明你只能创建128个并发任务 private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);
    • 旋转:Activity重新启动,你的AsyncTask的参考Activity不再有效,因此onPostExecute()将不起作用。
    • 取消AsyncTasks:如果你AsyncTask.cancel()它不会取消你的AsyncTask。您需要检查AsyncTask是否已被取消。
    • 寿命周期:AsyncTask未与ActivityFragment连接,因此您必须管理取消AsyncTask的行为。

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