我知道你在AsnycTask中使用非UI代码很好,但我只是想知道在使用AsyntTask时是否存在任何问题?我没有任何产生问题的代码。但是我很想知道如果你有AsnycTask并希望分享它会有任何糟糕的经历。
答案 0 :(得分:3)
即使活动被破坏,AsyncTask也会保存Activity的引用,因为它必须使用回调方法更新UI。
使用cancel()取消AsyncTask API不会确保任务立即停止。
完成屏幕方向时。活动被销毁并重新创建,因此AsysncTask将保留活动的无效引用,并且在更新UI时会遇到麻烦。
答案 1 :(得分:2)
Asynctask.java
转到行号 199 ,它显示您只能创建128个并发任务
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);
Activity
时,AsyncTask
对Activity
的引用不再有效,因此onPostExecute()
将有没有效果。 AsyncTask.cancel()
它未取消AsyncTask
。由你来检查AsyncTask是否已被取消。AsyncTask
未与Activity
或Fragment
相关联,因此您必须管理AsyncTask
的取消。 有一些解决方法可以解决上述问题,有关详细信息,请查看The Hidden Pitfalls of AsyncTask
答案 2 :(得分:1)
我只想分享这些信息,如果你使用的是Asynctask,即使活动不存在,它也会继续工作。 因此,如果你有asynctask从活动的onCreate()开始,你旋转设备。在每次轮换时,都会使用Asysntask的新实例创建一个新活动。如此多的请求将通过网络发送以执行相同的任务。这样,将消耗大量内存,这会影响应用程序性能,从而导致崩溃。所以要处理它使用Loaders(Asynctask Loaders)。 有关更多信息,请查看视频: Loaders