为啥Android的AsyncTask不适合执行长时间操作的任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥Android的AsyncTask不适合执行长时间操作的任务相关的知识,希望对你有一定的参考价值。

参考技术A 如果你在一个Activity中创建了一个AsyncTask,你旋转了屏幕,这个Activity将会被销毁并且会重新创建一个新的实例。但是AsyncTask没有销毁,它将会继续执行直到完成。当它执行完成后,它实际上是更新了上一个已经不存在的Activity,如果你原本想在onPostExecute()中更新UI的话,这时的AsyncTask将不会更新新的Activity,并且这个操作会引发一个异常:java.lang.IllegalArgumentException。
如果你是想要在onPostExecute()中关闭一个dialog,则会发生:java.lang.IllegalArgumentException: View not attached to window manager(前提是你忘记在Activity的onStop()中忘记dismiss)。不仅如此,还会在show()的调用出抛出一个lead window的异常:
Activity com.xxx.XXXActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView5350b3f4 V.E..... R....... 0,0-729,192 that was originally added here

以上是关于为啥Android的AsyncTask不适合执行长时间操作的任务的主要内容,如果未能解决你的问题,请参考以下文章

android AsyncTask执行为啥这么慢

为啥我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask

Android自助餐之AsyncTask

Android - 执行 AsyncTask 线程的问题

android asynctask怎么用

Android AsyncTask分析