蓝鸥Android培训总结了安卓内存消耗过大的原因以及优化的方式方法如下:
追查内存的方法
第一步:使用lint
lint会提醒你很多使用不得当的地方,主要会集中再这么几个地方:
(1)handler等长周期匿名内部类的使用
(2)数据结构的优化,hashmap向稀疏数组的优化
(3)未使用的图片资源
第二步:使用脚本每隔1s输出对应包的PSS值
PSS的定义是:Proportional Set Size实际使用的物理内存(比例分配共享库占用的内存)。
共享内存则是:framework的代码与资源在ram中占有的内存。所以PSS值除了自身应用占有的内存外还包括共享内存中比例分配到单个应用身上的内存。
所以我觉得用这个值来定义是否进行了优化是比较合适的。
第三步:使用核心然后再退出的功能,查看PSS值是否飙升或者在使用后长时间不降低下来
如果遇到飙升虽然后续能降低下来,但是依然有可能OOM,这样我们也需要去追查是什么原因了,看如何能够减少内存的使用。
而内存使用长时间不降低下来肯定是因为对象使用后还被引用着导致未被销毁,当遇到这些情况后,我们要引入下一个工具了MAT。使用MAT分析内存内容比较多就不在这里一一列举。
内存消耗过大的原因
1 handler,resultreceiver等生命周期较长的匿名内部类,匿名内部类会持有外部类的引用,从而导致短期就算activity退出但其实其中的activity也会被引用从而导致相关的资源未被回收。
2数据结构的优化,hashmap替换成sparsearray。
3图片的优化,采用缓存,图片缩略加载基于不同手机的分辨率获取不同尺寸的图片,必要时可以进行缩放以及色彩优化。
Android色彩模式说明:
ALPHA_8:每个像素占用1byte内存。
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存
RGB_565:每个像素占用2byte内存
Android默认的色彩模式为ARGB_8888,这个色彩模式色彩*细腻,显示质量高。但同样的,占用的内存也大。另外bitmap要记得recycle。
更多Android知识去哪里学?去蓝鸥郑州Android培训机构好。
QQ:2290909800 QQ交流群:493076664;97682894;咨询电话(Phone):15838221845(手机)
地址(Address): 郑州市高新区莲花街牡丹路教育科技产业园区B座。 |
|
|