Android开发:异步任务AsyncTask存在的缺点

Android开发:异步任务AsyncTask源码解析
android开发:AsyncTask实现并发执行异步任务

AsyncTask虽然能够帮助我们执行异步操作,但是AsyncTask本身存在很多糟糕的问题,如果使用中不注意,将会影响程序的健壮性。以至于现在使用的几率已经很少。

1、生命周期

AsyncTask的生命周期不会和Activity的生命周期随着销毁而销毁,它会一直执行,
直到doInBackground()方法执行完毕。如果 cancel(boolean)被调用, 那么onCancelled(Result result) 方法会被执行;否则,执行onPostExecute(Result result) 方法。如果我们的Activity销毁之前,没有停止AsyncTask,这有可能让我们的AsyncTask崩溃(crash)。因为它想要处理的view已经不存在了。所以,我们总是必须确保在销毁活动之前取消任务。总之,我们使用AsyncTask需要确保AsyncTask正确地取消。

2、内存泄漏

如果AsyncTask被声明为Activity非静态的内部类(内部类会隐式持有外部类的引用),那么AsyncTask会保留一个对创建了AsyncTaskActivity的引用。如果Activity已经被销毁,AsyncTask的后台线程还在执行,它将继续在内存里保留这个引用,导致Activity无法被回收,引起内存泄露

3、结果丢失

横屏会导致activity被销毁创建,之前运行的AsyncTask会持有一个之前Activity的引用,这个引用已经无效,这时调用onPostExecute()再去更新界面将不再生效。

发布了194 篇原创文章 · 获赞 42 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39027256/article/details/103583513
今日推荐