Handlerをカスタマイズする際、メモリの漏洩を効果的に回避するにはどうすればいいですか?
1354 ワード
ソリューション:step 1.カスタム静的handler step 2.弱い参照step 3を追加することができます.もう一つのアイデアはactivityが破壊されたときにメッセージが出なかったらremoveを落とそうremovecallbacksandmessagesはMessageとRunnableとnullがライフウィークに書いたondestroy()をクリアすればいい
( )
,MainActivity GC ?
GC ? MainActivity
Handler / , MainActivity
MainAcitivity , Handler / ,handler
private static class MyHandler extends Handler {
//private Main2Activity mainActivity;// ,
private WeakReference mainActivity;// , GC
public MyHandler(Main2Activity mainActivity) {
this.mainActivity = new WeakReference(mainActivity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Main2Activity main = mainActivity.get();
if (main == null || main.isFinishing()) {
return;
}
switch (msg.what) {
case 0:
//
//MainActivity.this.a;// , ,
int b = main.a;
break;
}
}
}