不需要使用WeakReference来避免内存泄露

原文地址:WeakReference in Android – Google Developers Experts – Medium

一个同事最近提到他看到的一句描述:

如果你是一个Android开发者,如果不使用WeakReferences,你就有问题。

我自己认为,这句话就算不是一个错误的结论,也是完全误导人的。WeakReference应该被当做修复内存泄露的最后一步。

今天,我在Google Developers Experts上面发现了发布的这篇文章:

Finally understanding how reference work in Android and Java

这是一篇非常棒的文章,用示例总结了references在Java中是如何工作的。

这篇文章并没有说我们一定要使用WeakReference,但是也没有给我们其他的可选项。我觉得我一定要给一个不是必须使用WeakReference的替代选择。

如果你不使用WeakReference你也没有任何毛病。

我相信在每个地方都使用WeakReference并不是最好的选择,使用WeakReference去解决内存泄露的问题证明你缺乏建模思想。

尽管文章中给出了解决潜在的内存泄露,这里还有其他的方法,我将会给出几种解决方案来避免在后台线程中执行长时间的任务所导致内存泄露的问题。

一个简单的示例来解决AsyncTask导致内存泄露的问题:

这里是我的Activity:

不需要使用WeakReference来避免内存泄露_第1张图片
AsyncTask

这里是我的AsyncTask:

不需要使用WeakReference来避免内存泄露_第2张图片
AsyncTask

这个解决方案,我知道很基本,但是足以展示另一种解决方案。

下面是另外一种使用Rxjava的解决方案:

不需要使用WeakReference来避免内存泄露_第3张图片
Rxjava

这里如果我们没有unSubscribe的话,还是会存在内存泄露的。

最后我推荐给大家一下示例,都是一些值得学习的资源,他们没有任何WeakReference。

bonfier-firebase-sample

spikes

如果存在内部类的情况下,则使用静态内部类。如果这些内部类执行耗时的操作的话,那么建议迁移到单独的类中来操作。

使用非静态的内部类执行耗时的后台任务也是一个不好的选择,即使不是在Android中。

你可能感兴趣的:(不需要使用WeakReference来避免内存泄露)