optimisation de code Android

1, les pertes de mémoire du gestionnaire

Produit une des raisons de fuite de mémoire: les classes internes statiques détenues par Anonymous en utilisant une classe externe, ce qui lorsque l'utilisateur quitte l'activité en cours, un certain nombre d'opérations de temps à l'intérieur du gestionnaire est toujours en cours d'exécution, ce qui entraîne l'activité a également été gestionnaire cité à faire, conduisant éventuellement activité et rester dans pile, il n'a pas été récupéré, conduisant à des fuites de mémoire.

Solution: interne 1.handler tenir faibles références de l' activité extérieure.
        2. Le gestionnaire au lieu de classes internes statiques.
        3. La méthode de l'activité est perdue par onDestory mHandler.removeCallBack ().
      (Seule solution à 90%)

private MyHandler mMyHandler = new MyHandler(this);

private static class MyHandler extends Handler{

   // SoftReference<Activity> 也可以使用软应用 只有在内存不足的时候才会被回收
    private final WeakReference<Activity> mActivity;

    private MyHandler(Activity activity) {
        mActivity = new WeakReference<>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        Activity activity = mActivity.get();
        if (activity != null){
            //做操作
        }
        super.handleMessage(msg);
    }
}

private static final Runnable sRunnable = new Runnable() {
    @Override
    public void run() {
        //做操作
    }
};

 

Publié 49 articles originaux · louange gagné 2 · Vues 8602

Je suppose que tu aimes

Origine blog.csdn.net/yangjunjin/article/details/103281985
conseillé
Classement