Guy*_*Guy 10 android android-fragments android-memory android-glide
我有一个Fragment有RecyclerView.
在这里RecyclerView,我偶尔可以下载并显示图像(加载Glide到ImageView.
因此,当我打开时Fragment,使用过的内存有时会从大约30MB跳到大约100MB甚至更多.
在Activity持有Fragment完成之后,内存不会释放.它和以前一样.
我检查滑翔文档,显然我们不必担心释放Bitmaps在RecyclerView.这是一个很大的问题,因为应用程序经常因为OOM而崩溃.
Fragment删除后我应该如何正确处理释放内存?
编辑:另一个观察
我注意到的另一件事是,如果我完成了Activity,然后Activity再次开始相同.内存将跳回一段时间然后再回到100MB,这让我相信在Fragment再次启动之前内存已被清除.
垃圾收集有时是Android中的一个痛苦问题.大多数开发人员都没有考虑这个问题,只是继续开发而没有任何资源分配意识.
这当然会导致内存问题,例如泄漏,OOM和不必要的资源绑定.绝对没有自动释放内存的方法.在任何情况下,您都不能完全依赖垃圾收集器
每当您传递Fragment或Activity的onDestroy()方法时,您可以做和应该做的就是擦除应用程序中不再需要的任何构造.您可以执行以下操作:
我最终做的是创建一个类似的界面
public interface clearMemory(){
void clearMemory();
}
Run Code Online (Sandbox Code Playgroud)
并在每个类上实现它,无论是Activity,Fragment还是普通类(包括适配器,自定义视图等).
然后,每当要销毁类时,我都会调用该方法(因为应用程序被销毁或者我觉得需要这样做.小心不要在正常的运行时中处理)
@Override
public void onDestroy(){
clearMemory();
}
public void clearMemory(){
normalButtonOnClickListener = null;
normalButton.setOnClickListener(null);
normalButton = null;
myCustomClass.clearMemory(); // apply the interface to the class and clear it inside
myCustomClass = null;
simpleVariable = null;
...
}
Run Code Online (Sandbox Code Playgroud)
通过系统地实现这一点,我的应用程序的内存管理变得更容易和更精简.然后,人们可以确切地知道/控制存储器的处理方式和时间.
| 归档时间: |
|
| 查看次数: |
3344 次 |
| 最近记录: |