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