安卓文档说:
“当系统而不是用户关闭活动以节省内存时,......”
但是如何模拟这种情况?我想调试onRestoreInstanceState(Bundle)
方法,但不知道如何。
安卓文档说:
“当系统而不是用户关闭活动以节省内存时,......”
但是如何模拟这种情况?我想调试onRestoreInstanceState(Bundle)
方法,但不知道如何。
你不能以自动化的方式做到这一点,因为它完全是不确定的。
请在此处查看我的答案:https ://stackoverflow.com/a/15048112/909956了解详细信息。
但好消息是您需要做的只是模拟调用 onSaveInstanceState 并且您正在间接测试这种低内存情况。
onSaveInstanceState 可以通过以下方式触发:
我使用“不保留活动”开发人员选项来重现由于内存压力导致活动被终止时发生的崩溃。您可以在 的Apps
部分中找到它Settings->Developer Options
。
一旦你离开它,它就会破坏每一个活动。例如,如果您按 home 键将您的应用程序置于后台,则当前活动将被破坏。有关更多信息,请参阅https://stackoverflow.com/a/22402360/2833126。
出于调试的目的onRestoreInstanceState()
,只需更改屏幕方向(模拟器中的[Ctrl]-[F11])。您的活动将被销毁并重新创建,并且onSaveInstanceState()
/onRestoreInstanceState()
对将被调用。
要调试onRestoreInstanceState您可以执行以下操作:
确保您可以在应用程序启动后立即对其进行调试(从您的构造函数调用android.os.Debug.waitForDebugger()会有所帮助,它会挂起您的应用程序,直到连接调试器),
将您的应用程序置于某种状态,
因果从Settings->Apps杀死它,
通过最近的应用程序按钮因果切换回它(它仍将在列表中),
此时您的应用程序将重新启动,并且onRestoreInstanceState将立即在顶部活动上调用。
使用 SetAlwaysFinish 应用程序(适用于真实设备和模拟器)或使用 Google DevTools 应用程序(仅适用于模拟器)。
这些应用程序使用 ActivityManagerNative 类的隐藏 AlwaysFinish 设置来更改操作系统的行为,并使其在不再处于前台时立即卸载每个活动。这将可靠地触发 onSaveInstanceState 和 onRestoreInstanceState 事件。
有关详细信息,请参阅下面的链接:http: //bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/
这里有很好的答案。
现在,在遥远的未来,在 Android Studio 中使用 Instant Run 也会在代码更改重新启动活动时触发保存和恢复。
在 Android 6 和更新版本中有一个不错的解决方案。在这里查看我的答案:模拟在模拟器中杀死活动