Android内存优化个人经历

项目从3月开始做,维护加上各种加功能,App直线增肥,从原来20M的性感美女变成的如今50M的中年大妈,各种繁乱的逻辑要了老命了。特别是上个月的内存泄漏导致的卡顿,能把人憋死。App一跑内存占用就300M+,好点的手机还能撑一阵,运行内存只有2G的用不到10分钟就各种ANR。好了废话不多说,说下我的优化之路。

一、一开始我也是各种百度,然后我怀疑是强引用过多,就写了个软应用工具类,把用的强应用都替换了

public static void setSoft(String objname,Object object){
    softReference=new SoftReference<>(object);
    softReferenceMap.put(objname,softReference);
}

public static <T extends Object> T getSoft(String key){
    SoftReference<Object> softReference=softReferenceMap.get(key);
    if(softReference==null){
        return null;
    }else {
        return (T)softReference.get();
    }
}
不知道写的对不对啊,大神请指正。不过并没有卵用,该卡还是卡。

我想我得换个思路,得把问题找到,于是我升级了Android Studio 3.0 ,把自带的Android Profiler调出来

频繁的回收会导致滑动卡顿,进而引发OOM.检测出来发现是商城的Activity对象发生了泄漏。导致Activity对象被持有无法被回收。

找到原因就是下一步


询漏之旅:内存泄漏无法以下几点:1.注册了广播没反注册 2.线程没取消 3.内部类非静态 4.单例  5.数据库游标未关闭 6.Handler 7.webview资源未释放

我把所有都试了一遍,内存泄漏解决了,不过效果不大,内存占用还是很高,后面我又加了阿里云对展示图片进行裁剪,减少内存占用 。到了这一步我也快疯了,没办法,运行十分钟照样卡,再加上商城又加了一个多线程的限时抢购,用timer做的。那内存,酸爽的一bi。


换个思路:后面我想了下是不是控件的原因呢,毕竟该优化都做了,唯一没动的就是Xml文件了,没错,布局过于复杂也会引发内存占用过大,因为商城需求的多样化,布局被我写得臃肿不堪,各种嵌套,Scrollview套LinearLayout  ,LinearLayout加ListView  ,ListView里还有RecyclerView 。。。说说解决办法:去掉scrollview  用Gridview替换掉Recycleview  把大列表顶部作为一个头布局直接进行加载,头布局里的逻辑在头布局的initHeadView方法里处理。做到这基本就能保证在配置不是那么好的手机上完美运行了

          当然,代码优化之路任重道远,愿我的经历能帮助到你。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值