最近对app进行了一次内存优化,如下记录了此次优化的过程。主要使用了Android profile工具,打开app后把所有UI界面都打开一遍,然后back退出app。
再点击Android Profile上的gc,让系统进行一次内存回收,再生成Heap Dump文件,分析这个 dump 文件,选择 Arrange by package 来分析 ui 部分内存情况,发现虽然所有Activity已经退出,也执行了gc,还是有部分内存未释放。
如下修改了几点:
1、Activity启动模式,使用 Intent.FLAG_ACTIVITY_CLEAR_TOP。这样可以避免 Activity 按home退出后重新 start会创建新的实例。
2、避免使用 enum,从Android Profile 看到使用 enum会占用更多内存,而且不能及时回收。
3、Adapter 的及时释放,在Activity finish时,及时释放Adapter。
4、Context 的使用,特别是单例时,Context最好使用 ApplicationContext。
5、Toast释放,弹出Toast会在一定时间才消失,如果此时退出了Activity,系统进行内存回收就会因为Toast持有Context,而造成Activity无法及时回收。
6、一些不再需要使用的资源及时释放。