[英]Android Activity Lifecycle Handling
我是android编程的新手,想弄清楚Activity Lifecycle的概念。
为简单起见,我将情况简化如下:
有2个活动(MainActivity和Main2Activity)。
在MainActivity中,创建一个按钮以打开Main2Activity。
在Main2Activity中,为了模拟显示Main2Activity的用户返回MainActivity,它调用finish()并在onCreate()中返回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.