Android 关于应用程序生命周期和onSaveInstanceState的问题

Android 关于应用程序生命周期和onSaveInstanceState的问题,android,Android,我的应用程序在几个用例中与浏览器交互: 第一种情况: 从启动器启动MyApplication ActivityA 使用startActivityForResult启动MyApplication ActivityB(调用ActivityA的onSaveInstanceState) 使用startActivity启动浏览器(调用ActivityB的onSaveInstanceState) 关闭浏览器或按Back。ActivityB从已保存的实例状态束中恢复 第二种情况: 从启动器启动MyApplic

我的应用程序在几个用例中与浏览器交互:

第一种情况:

  • 从启动器启动MyApplication ActivityA
  • 使用startActivityForResult启动MyApplication ActivityB(调用ActivityA的onSaveInstanceState)
  • 使用startActivity启动浏览器(调用ActivityB的onSaveInstanceState)
  • 关闭浏览器或按Back。ActivityB从已保存的实例状态束中恢复
  • 第二种情况:

  • 从启动器启动MyApplication ActivityA
  • 使用startActivity启动浏览器(调用ActivityA的onSaveInstanceState)
  • 浏览器回调MyApplication ActivityA(我无法控制浏览器回调的方式,比如启动活动时使用的标志。它回调的方式是我向其传递回调URL(Google OAuth回调URL),我的ActivityA中有一个意图过滤器来截取该URL。)
  • 使用startActivityForResult启动MyApplication ActivityB(调用ActivityA的onSaveInstanceState)
  • 使用startActivity启动浏览器(ActivityB的onSaveInstanceState未调用)
  • 关闭浏览器或按Back。无法完全还原ActivityB,因为在上一步中未调用onSaveInstanceState 我的问题将与第二个案例的步骤5有关,其中未调用onSaveInstanceState

    通过阅读Android生命周期的基础知识,以及onSaveInstanceState API,我有点理解为什么没有调用它。这来自onSaveInstanceState的API:

    调用onPause()和onStop()而不是此方法的一个示例是当用户从活动B导航回活动a时:不需要在B上调用onSaveInstanceState(Bundle),因为该特定实例将永远不会被还原,因此系统避免调用它

    i、 e.因为流程类似于
    活动A->浏览器->活动A->活动B->浏览器

    由于之前已有浏览器活动,ActivityB被视为导航回浏览器,因此不调用onSaveInstanceState

  • 我的上述理解正确吗

  • 在这种情况下,我真的应该使用onPause而不是onSaveInstanceState吗?(从惰性的角度来看,onSaveInstanceState要简单得多,因为我可以将内容转储到捆绑包中,而不必为onPause设计/创建SQLite表。)但这方面的最佳实践是什么

  • 如果我对1和2的回答是正确的,那么使用onPause保存状态似乎比使用onSaveInstanceState更健壮。那么,在什么情况下,我们真的应该使用onSaveInstanceState而不是onPause


  • 如果事情没有按预期工作,您在onSaveInstanceState()中保存了什么?5个字符串和1个parcelable(其中包含9个字符串和2个长字符串)。这会引起问题吗?请注意,这与第一个案例的步骤3相同,并且成功调用了onSaveInstanceState。是否确实要尝试使用浏览器而不是
    WebView
    ?在第一个案例的步骤3和第二个案例的步骤5中,是的,我确实想使用浏览器。但你提出了一个有趣的想法。我可能会在第二个案例的第2步中探索使用webview(对于GoogleOAuth)。尽管如此,如果我在所有情况下都使用浏览器,您对我有关应用程序生命周期/onSaveInstanceState的问题有什么建议?如果事情没有按您预期的那样运行,您会在onSaveInstanceState()中保存什么?5个字符串和1个parcelable(包含9个字符串和2个长度)。这会引起问题吗?请注意,这与第一个案例的步骤3相同,并且成功调用了onSaveInstanceState。是否确实要尝试使用浏览器而不是
    WebView
    ?在第一个案例的步骤3和第二个案例的步骤5中,是的,我确实想使用浏览器。但你提出了一个有趣的想法。我可能会在第二个案例的第2步中探索使用webview(对于GoogleOAuth)。然而,如果我在所有情况下都使用浏览器,您对我有关应用程序生命周期/onSaveInstanceState的问题有什么建议?