【问题标题】:finish() vs startActivity()完成()与开始活动()
【发布时间】:2018-02-15 03:21:10
【问题描述】:

根据 Android 文档,finish() 的作用与“后退”按钮的作用完全相同。所以基本上 onStop() 在我调用 finish() 时会被调用。

我试图重写 onStateSaveInstance() 以保存当前状态,但它从未被调用。但是,如果我通过创建新 Intent 并使用 startActivity() 转到上一个活动,则会调用 onStateSaveInstance() 方法。有什么原因吗?

【问题讨论】:

  • finish() does exactly what the "back" button does. 除非您的 super.onBackPressed() 尚未关闭活动,而是将其委托给片段回栈等
  • I tried to override onStateSaveInstance() to save the current state, but it is never called. 用于配置更改和进程死亡,而不是用于您的 Activity 实际完成时。

标签: android bundle state onsaveinstancestate


【解决方案1】:

所以基本上 onStop() 在我调用 finish() 时会被调用。

不一定。当您的活动不再可见时调用onStop()finish() 仅在您调用 finish() 时活动可见时才会触发对 onStop() 的调用。

我试图重写 onStateSaveInstance() 来保存当前状态,但它从未被调用

正确。你正在破坏活动。没有要保存的实例状态。

但是,如果我通过创建新 Intent 并使用 startActivity() 转到上一个活动,则会调用 onStateSaveInstance() 方法

不一定。这将取决于清单中的Intent 标志、android:launchMode 等。

有什么原因吗?

onSaveInstanceState() 不会在您的活动被销毁时被调用。没有要保存的实例状态,因为实例即将消失。

【讨论】:

  • 我知道不能保证活动被销毁,操作系统会处理这个。这是一个例外吗?
  • @Florin: whatwhat 的例外吗?
  • 您说 onSaveInstanceState() 没有被调用,因为活动正在被销毁。但我知道操作系统会处理这样的事情,并且不能保证某个活动不再存在。
  • @Florin:如果您调用finish(),则活动正在被销毁。我想不出调用finish() 不会破坏活动的场景。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多