Android Activity 生命周期处理

Android Activity Lifecycle Handling

我是 android 编程新手,想弄清楚 Activity 生命周期的概念。

为简单起见,我将案例简化如下:

点击按钮的时候发现好像出现了race condition

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

如何确保在开始另一个 activity 之前调用 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()

这是此方法的documentation

这看起来像:

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