记Android 中Application Not Responding(ANR)解决

       三个多月前换了新工作,新公司的项目是从外包开发的半成品。代码可圈可点,但就是稳定性差点;动不动就无响应;迫于时间紧凑,于近日,才将其解决。故作记录;

      我们都知道,造成ANR的根本原因无非是在:Activity中超过5s无响应、Broasdcastreceiver中超过10s、Service中超过20s;如上,就会是页面卡死,用户体验极差;

      在仔细阅读完项目代码后,发现:

      1、项目中频繁使用Handler、在Activity的onCreate()、onResume()生命周期中有不尽相同数量的对象创建;

      2、因为项目中用到了Socket,故大面积的使用了BroadCastReceiver,而且在里面有不同的网络请求;

      3、接口较多,且接口响应迟缓;

      4、static修饰的静态变量较多;

      故针对以上几点,对项目进行了优化,成功解决了无响应的问题,优化细节如下:

      1、Handler的使用优化:弱引用:handler正确使用代码如下:

   private final MHandler mHandler = new MHandler(this);
   private static class MHandler extends Handler {
       private final WeakReference<LoginActivity> mHActivity;

       public MHandler(LoginActivity activity) {
           mHActivity = new WeakReference<LoginActivity>(activity);

       }
   }

      2、关于后台数据响应较慢,是因为后台数据冗余,检索速度较慢,需后台小伙伴对接口进行优化,增加索引等;

     3、尽量少的在Activity的onCreate()、onResume()方法中创建对象;

     4、尽量避免在BroadCastReceiver中做好事操作或是计算;

     5、尽量不用static修饰变量;

    6、集合、bitmap等不使用之后切记对资源进行释放;

    7、避免重复多次的网络请求;

 

经过如上一波修改,ANR不再频发;以上是我个人就此次项目遇到问题的解决过程,哪里说的不对,还望各位指正;

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值