繁体   English   中英

Android活动生命周期处理

[英]Android Activity Lifecycle Handling

我是android编程的新手,想弄清楚Activity Lifecycle的概念。

为简单起见,我将情况简化如下:

  • 有2个活动(MainActivity和Main2Activity)。

  • 在MainActivity中,创建一个按钮以打开Main2Activity。

  • 在Main2Activity中,为了模拟显示Main2Activity的用户返回MainActivity,它调用finish()并在onCreate()中返回MainActivity。

单击该按钮时,我发现似乎发生了竞争情况。

  • MainActivity :: onCreate()<-第一个MainActivity实例
  • MainActivity :: onStart()<-第一个MainActivity实例
  • MainActivity :: onResume()<-第一个MainActivity实例
  • MainActivity :: onPause()<-第一个MainActivity实例
  • MainActivity :: onCreate()<-第二个MainActivity实例
  • MainActivity :: onStart()<-第二个MainActivity实例
  • MainActivity :: onResume()<-第二个MainActivity实例
  • MainActivity :: onStop()<-第一个MainActivity实例
  • MainActivity :: onDestroy()<-第一个MainActivity实例

第一个MainActivity实例的最后一个onDestory()将在第二个MainActivity实例的onCreate(),onStart()和onResume()之后运行。

如何确保在开始另一个活动之前调用onDestroy()?

非常感谢大家的帮助。


MainActivity.java

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

    final Button btnClick = findViewById(R.id.btnClick);
    btnClick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // finish self
            finish();
            // start Main2Activity
            Intent intent = new Intent(v.getContext(), Main2Activity.class);
            startActivity(intent);
        }
    });
}

Main2Activity.java

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

    // return to MainActivity
    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
    // finish self
    finish();
}

不确定其解决方案,但请尝试一下。

在Main2Activity.java上

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

// return to MainActivity

new Handler().postDelayed(new Runnable() {

     @Override
     public void run() {
       Intent intent = new Intent(this, MainActivity.class);    
       startActivity(intent);
     }
},5000);

// finish self
finish();
}

这将在5秒后调用startActivity ..这将为结束提供足够的时间来调用所有生命周期

您可以在第一个MainActivity实例上调用isFinishing()

这是此方法的文档

这看起来像:

if (isFinishing()) {
  //onDestroy() has not been called yet
}
else {
  //onDestroy() has been called already
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM