一键曾当百万狮 2020-03-20 12:14 采纳率: 0%
浏览 331

Android异步机制中this.finish,无法销毁界面?

Handler机制中,活动名称.this.finish()之后,该活动没有被销毁,活动直接又一次的被重新启动了。然后oncreate方法重新被回调,界面重新被绘制了一次,这是什么原因啊?

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-07-25 17:37
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    在Handler机制中,当调用`Activity.this.finish()`方法时,实际上是调用了`finish()`方法,该方法会将当前Activity设置为finishing状态,并在Looper中的MessageQueue中发送一个消息来执行销毁操作。在该Activity销毁之前,如果有消息还在MessageQueue中等待执行,则会导致Activity在销毁之前再次被重新启动。 在实际开发中,可以使用Handler的`removeCallbacksAndMessages()`方法来移除所有未处理的消息,避免在Activity销毁之前再次被启动。 以下是一个简单的例子,演示了Handler机制导致Activity在销毁之前再次启动的情况:
    public class MainActivity extends AppCompatActivity {
        private Handler mHandler;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mHandler = new Handler();
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    finish();
                }
            }, 1000);
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mHandler.removeCallbacksAndMessages(null);
        }
    }
    

    在上述代码中,我们延迟1秒后调用finish()方法,如果不及时移除未处理的消息,可能会导致Activity在销毁之前再次被启动。因此,在onDestroy()方法中调用removeCallbacksAndMessages(null)可以避免这种情况发生。

    评论

报告相同问题?