在Android开发中,我已经知道定义为非静态嵌套类的AsyncTask并不理想,因为当启动任务的Activity在任务完成处理之前死亡时,它可能会导致内存泄漏 .
所以使用Loaders的解决方案,其生命周期与活动的生命周期无关 .
但是,在他们已经定义了匿名AsyncTaskLoader的情况下怎么样呢 . 在我看来,这个Loader引用了它的外部活动 .
(1)这是否会导致内存泄漏,启动活动无法进行垃圾回收?
此外,Loader的onStartLoading()方法保存对外部活动的成员mLoadingIndicator的引用 .
(2)如果onCreateLoader仅在应用程序第一次启动时被调用,那么这个加载器是否会永远锁定到第一个活动的mLoadingIndicator,忽略来自新活动的视图? (例如配置更改后)
1 回答
是的,它有 .
是的,它确实 . 如果这个
Loader
无限期地运行并且比包含的Activity
更长,它可能会阻止上下文的垃圾收集 .onCreateLoader
没有锁定到视图mLoadingIndicator
正在引用,但它只调用其中一个方法 . 真正重要的是mLoadingIndicator
在调用onCreateLoader
时引用的对象 .实际上,加载器会锁定外部活动 . 如果配置更改创建了新的加载指示器视图,并且仅在调用
onCreateLoader
时,该方法将使用新视图 .示例
AsyncTaskLoader
可以通过将其包装在_2615627中而引用内存泄漏而引用Activity
.