- android/
- Android 关于应用程序生命周期和onSaveInstanceState的问题
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的问题有什么建议?