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

        }
    }