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() {
//做操作
}
};