Android 解决内存溢出的方法

步骤:


1.mokey测试命令:

adb -d 设备名 monkey -s 5 -p 包名 --throttle 1000 --pct-touch 43 --pct-motion 18 --pct-trackball 15  --pct-nav 5 --pct-
majornav 10 --pct-appswitch 2  --pct-flip 0 --pct-anyevent 0 --kill-process-after-error --monitor-native-crashes -v -v 

5000000  > d:\log.txt

      需要检查你的程序多久会内存溢出。


2.DDMS->选中需查看的进程->update heap->Cause GC 查看内存占用情况。(内存大小是动态分配的)。

    进入一个界面,退出,再GC 。重复多次。如果内存不断增加。说明有内存溢出。

    这个方法只针对你知道或者怀疑某个界面有内存溢出。更详细的分析你需要借助下面提到的工具。



3.DDMS->选中需查看的进程->Dump HPROF file 。通过hprof-conv 命令转换文件。通过MAT Eclipse插件, 在memory analysis中打开该文
件进行内存详细分析(在程序快要内存溢出前抓取)。

   a.android中,除了resource,bitmap,等占用内存大外,如果还有其它对象占用很多内存说明有问题。
   b.分析对象个数,跟实际使用数目对比。
   c.同样一个对象,内存占用情况对比。

   

    



经验:


1.一个界面里的图片多而大的话,bitmap需要做缩放。(针对一进入该界面就内存溢出的情况)。
2.少用全局的静态变量。用了要及时值空。
3.列表需要及时清空。
4.图片的全局缓存,用弱引用。保证内存不够的时候能GC。

5.View缓存需要及时清理。

6.长生命周期里的对象不要引用短生命周期的对象(保证主与activity相关的对象能及时回收)。

7.虚拟机只自动回收那些与root节点(主Activity,service)没有引用的对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值