appパフォーマンス最適化-メモリ漏洩を回避2

1221 ワード

質問:


Handlerによるメモリリークの問題Handlerによるメモリリークはactivity破棄時にHandlerに未実行のタスクがあるためである

ソリューション:

  • Handlerは静的であると宣言し、Activityを弱い参照とする.
  • 未実行のタスクをonDestoryから削除します.

  • コード参照:

    
        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); 
        }