appパフォーマンス最適化-メモリ漏洩を回避2
1221 ワード
質問:
Handlerによるメモリリークの問題Handlerによるメモリリークはactivity破棄時にHandlerに未実行のタスクがあるためである
ソリューション:
コード参照:
private Handler handler;
private static class MyHandler extends Handler {
WeakReference mWeakReferenceActivity;
MyHandler(SplashActivity activity) {
mWeakReferenceActivity = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (null != mWeakReferenceActivity) {
SplashActivity _activity = mWeakReferenceActivity.get();
switch (msg.what) {
case GO_:
break;
}
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
handler = new MyHandler(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacksAndMessages(null);
}
private Handler handler;
private static class MyHandler extends Handler {
WeakReference mWeakReferenceActivity;
MyHandler(SplashActivity activity) {
mWeakReferenceActivity = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (null != mWeakReferenceActivity) {
SplashActivity _activity = mWeakReferenceActivity.get();
switch (msg.what) {
case GO_:
break;
}
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
handler = new MyHandler(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacksAndMessages(null);
}