天天看点

APP开发实战121-APP内存优化节省内存

30.3.1节省内存

1 当UI不可见时,释放相关资源:

在Activity的onPause函数中停止动画、停止视频播放和停止获取和传递设备当前的经纬度给服务器等。

在Activity的onStop函数中,取消当前页面的网络请求等。

在onTrimMemory() 方法中,接收到TRIM_MEMORY_UI_HIDDEN信号时,释放 UI 使用的内存资源,如图片占据的内存,这样减少内存消耗,也可避免被系统回收此APP使用的内存。

(onTrimMemory()方法中的TRIM_MEMORY_UI_HIDDEN回调只有当程序中的所有UI组件全部不可见的时候才会触发,这和onStop()方法还是有很大区别的,因为onStop()方法只是当一个Activity完全不可见的时候调用,比如说用户打开了程序中的另一个Activity。

可以在onStop()方法中去释放一些Activity相关的资源,比如说取消网络连接或者注销广播接收器等,但是像UI相关的资源应该一直要等到onTrimMemory(TRIM_MEMORY_UI_HIDDEN)这个回调之后才去释放,这样可以保证如果用户只是从程序的一个Activity回到了另外一个Activity,界面相关的资源都不需要重新加载,从而提升响应速度)

2 在解码JPG、PNG和GIF等格式的图片时,通过设置图片位数,可以有效减少使用的内存。

如Glide中默认的图片解码位数是32位:

publicstatic final DecodeFormat DEFAULT = PREFER_ARGB_8888

也就是用4个字节描述一个像素点的数据。

当APP检测到当前可用的内存少或屏幕的分辩率低时,可以降低图片的质量,就是降低图片的位数