记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 mHActivity;

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

       }
   }

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

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

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

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

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

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

 

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

 

 

 

 

 

 

你可能感兴趣的:(开发总结)