Android - 内部类 AsyncTask 是否必须有 WeakReference?

标签 android android-asynctask weak-references

假设我在 Activity 类中有一个内部类 AsyncTask。 我必须在这个 AsyncTask 中有 weakRefeernce 吗?

此外,我是否必须始终为 AsyncTask 使用 weakReference?

最后,如果我将内部类 AsyncTask 声明为静态的,它安全吗?

最佳答案

是的,如果它是内部类或只是创建它自己的类,请始终将您的 Asynctask 声明为静态,尽量避免声明为非静态内部类,因为它会造成内存泄漏。 Read here for a more elaborate explanation why you should not do this

您不想使用 WeakReference对于 Asynctask,因为 android 2.3+ 的垃圾收集器非常积极,并且会非常快速地收集所有弱引用。此外,弱引用通常不是线程的好模式,它更适合内存占用量大的对象,如位图(但在 android 中不再像之前所说的那样)。

来自 http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

Starting from Android 2.3 (API Level 9) the garbage collector is more aggressive with collecting soft/weak references which makes them fairly ineffective.

关于Android - 内部类 AsyncTask 是否必须有 WeakReference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19551484/

相关文章:

java - 从 Url 下载图像并转换为字节数组 - android

java - 将邮件输入移至邮件应用程序

android - 从 AsyncTask.THREAD_POOL_EXECUTOR 中删除并终止所有任务

android - 如何在recyclerview gridlayout中使用notifydatasetchanged

java - Android:在不阻塞 UI 线程的情况下从 AsyncTask 获取返回值

python - 创建子图时 Matplotlib "dictionary changed size during iteration"错误

memory-leaks - Dart/Flutter 有弱引用的概念吗?

java - 在 arrayadapter 中交换数据时从 Binder stub 实现中捕获 RuntimeException

java - 在android中以表格形式排列sqlite表数据?

ios - 是否有 NSMapTable 的 NSMutableArray 版本?