Android Handler handler = new Handler () La memoria de actividad se desborda La actividad destruye el controlador y llama al problema varias veces para saltar a la página de destino

Problema: use Handler handler = new Handler () para generar datos de red asincrónicos en la actividad, y llame al controlador varias veces para que la actividad se destruya 

HandleMessage 还能调用 activity中的方法多次跳转目标页面。

Motivo: la actividad utiliza una clase interna anónima para hacer que el objeto de la clase del controlador contenga la referencia de la actividad, lo que provoca un desbordamiento de la memoria y la actividad no se recicla. Entonces crees que la actividad destruida todavía está allí.

 

Solución: cree una interfaz personalizada y una clase de controlador personalizada. Actividad de desacoplamiento y manipulador. El controlador usa WeakReference para obtener una referencia débil a la interfaz de actividad. Cuando la actividad necesita ser reciclada, el manipulador ya no la afecta.

interfaz:

public interface OnHandlerCallBack {

    public void mHandleMessage(Message msg);
}

clase de controlador:

public class LoginHandler extends Handler {

    private WeakReference<OnHandlerCallBack> mactivity;
    public LoginHandler(OnHandlerCallBack activity){
        mactivity=new WeakReference<OnHandlerCallBack>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        OnHandlerCallBack callBack =mactivity.get();
        if(callBack!=null){
            callBack.mHandleMessage(msg);
        }
    }
}

1. Heredar e implementar la interfaz en la actividad

implements  OnHandlerCallBack 
//统一通信 登录线程切换
@Override
public void mHandleMessage(Message msg) {
    hideLoading();

    if (msg.what == 0) {
        //存储密码,跳转到主页面
    
    } else {
        ToastUtil.showShort(mContext, "FECK登录失败:" + msg.obj.toString());
    }
}

2. El manejador llama:

new LoginHandler(this::mHandleMessage)

 

problema resuelto.

Supongo que te gusta

Origin blog.csdn.net/qq_36355271/article/details/106897810
Recomendado
Clasificación