Handler memory leaks

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void nextPage(View view) {

        Intent intent=new Intent(this,SecondActivity.class);
        startActivity(intent);

    }
}

public class SecondActivity extends AppCompatActivity {


    /***
     *  内存泄露:
     *   Handler中有SecondActivity
     *   Message 中有 Handler
     *   MessageQueue中有 Message
     *   MessageQueue一直都在
     *   Looper从MessageQueue中取出消息
     *   Message处理好了以后,把Message清空,放入MessageQueue中
     *
     */
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            switch (msg.what) {
                case  1:
                    Intent intent=new Intent(SecondActivity.this,ThreeActivity.class);
                    startActivity(intent);
                    break;
            }

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }

    public void sendHander(View view) {

        Message message=Message.obtain();
        message.what=1;
        handler.sendMessageDelayed(message,5000);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

// 移除未处理的消息
      //  handler.removeMessages(1);
// 移除所有未处理的消息
        handler.removeCallbacksAndMessages(null);
    }
}

public class ThreeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);
    }
}

Problem: Click MainActivity in startActivity jumped SecondActivity, in SecondActivity, click startActivity after 3S enter ThreeActivity, but this time click on SecondActivity back in return MainActivity, theoretically SecondActivity have been destroyed, but the actual is not the case, or after the return MainActivity jumped into ThreeActivity

Published 141 original articles · won praise 51 · views 90000 +

Guess you like

Origin blog.csdn.net/dreams_deng/article/details/87905508