AndroidでApplication Not Responding(ANR)解決

1431 ワード

3ヶ月以上前に新しい仕事を変えて、新しい会社のプロジェクトはアウトソーシングから開発した半製品です.コードは点を囲むことができるが、安定性はもう少しである.すぐに返事がない.時間のコンパクトさに迫られて、近日、やっとそれを解決した.わざと記録する.
ANRの根本的な原因は、Activityで5 s以上応答がなく、Broasdcastreceiverで10 s以上、Serviceで20 s以上であることにほかならない.以上のように、ページカードが死んで、ユーザーの体験が極めて悪い.
プロジェクトコードをよく読んだ後、次のことがわかりました.
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は頻発しなくなった.以上は私個人が今回のプロジェクトについて問題に直面した解決過程であり、どこが間違っているのか、皆さんの指摘を望んでいます.