I am new to android programming and would like to make clear the concept of Activity Lifecycle.
To make it simple, I have shortened the case as below:
There are 2 activities (MainActivity and Main2Activity).
In MainActivity, a button is created to open Main2Activity.
In Main2Activity, in order to simulate user returning to MainActivity once Main2Activity is shown, it calls finish() and return to MainActivity in onCreate().
When the button is clicked, I found that there seems to have race condition occurred.
- MainActivity::onCreate() <-- 1st MainActivity instance
- MainActivity::onStart() <-- 1st MainActivity instance
- MainActivity::onResume() <-- 1st MainActivity instance
- MainActivity::onPause() <-- 1st MainActivity instance
- MainActivity::onCreate() <-- 2nd MainActivity instance
- MainActivity::onStart() <-- 2nd MainActivity instance
- MainActivity::onResume() <-- 2nd MainActivity instance
- MainActivity::onStop() <-- 1st MainActivity instance
- MainActivity::onDestroy() <-- 1st MainActivity instance
The last onDestory() from the 1st MainActivity instance will run after the onCreate(), onStart(), onResume() from the 2nd MainActivity instance.
How can I ensure the onDestroy() is called before starting another activity?
Thanks very much for everyone's help.
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();
}