【发布时间】:2019-02-02 06:39:53
【问题描述】:
我是android编程新手,想明确一下Activity Lifecycle的概念。
为简单起见,我将案例缩短如下:
有 2 个活动(MainActivity 和 Main2Activity)。
在 MainActivity 中,会创建一个按钮来打开 Main2Activity。
在 Main2Activity 中,为了模拟用户在 Main2Activity 显示后返回到 MainActivity,它调用了 finish() 并在 onCreate() 中返回到 MainActivity。
当按钮被点击时,我发现似乎出现了竞态条件。
- MainActivity::onCreate()
- MainActivity::onStart()
- MainActivity::onResume()
- MainActivity::onPause()
- MainActivity::onCreate()
- MainActivity::onStart()
- MainActivity::onResume()
- MainActivity::onStop()
- MainActivity::onDestroy()
第一个 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();
}
【问题讨论】:
-
好问题!
-
您为什么认为这是个问题? (AFAIK 您对此无能为力,运行时会按照自己的节奏完成/销毁活动。这取决于 Android 版本和硬件以及其他因素,例如当前有多少其他应用正在请求资源)
-
我打算在activity销毁的时候释放资源。如果在创建同一活动的新实例之前不能保证调用 onDestroy(),它会意外释放正在被另一个实例使用的单例资源。
标签: android android-activity activity-lifecycle