la optimización del código de Android

1, pérdidas de memoria Handler

Produce una pérdida de memoria razones: las clases internas estáticas mantenidas por Anonymous utilizando una clase externa, lo que resulta cuando el usuario sale de la actividad actual, un número de operación que consume tiempo dentro del manejador sigue en funcionamiento, lo que resulta en actividad también fue citado controlador de hacer, llevando eventualmente actividad y permanecer en pila, no ha sido recuperado, lo que lleva a pérdidas de memoria.

Solución: Interno 1.handler mantenga referencias débiles de la actividad exterior.
        2. El controlador de lugar de las clases internas estáticas.
        3. El método de la actividad se pierde por onDestory mHandler.removeCallBack ().
      (Solución Sólo 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() {
        //做操作
    }
};

 

Publicado 49 artículos originales · ganado elogios 2 · Vistas 8602

Supongo que te gusta

Origin blog.csdn.net/yangjunjin/article/details/103281985
Recomendado
Clasificación