如何模拟杀戮活动以节省内存?

时间:2010-03-01 12:56:53

标签: android activity-lifecycle onrestoreinstancestate

Android doc说:

  

“当系统而不是用户关闭活动以节省内存时,......”

但是如何模拟这种情况?我想调试onRestoreInstanceState(Bundle)方法,但不知道如何。

8 个答案:

答案 0 :(得分:32)

你无法以自动方式完成它b / c完全不确定。

请参阅我的回答:https://stackoverflow.com/a/15048112/909956了解详情。

但好消息是,您只需要模拟调用onSaveInstanceState并间接测试这种低内存情况。

onSaveInstanceState可以通过以下方式触发:

  1. 失去焦点(通过按回家本质上就像从你的应用程序切换到启动器应用程序),启动另一个活动,按下最近的
  2. 改变方向。如果您使用模拟器,这是更简单的方法
  3. 更改开发者设置:转到开发者选项 - >应用 - >不要保持活动。如果您在实际设备上临时测试,这是最佳选择。

答案 1 :(得分:16)

我已经使用过"不要保持活动"开发人员选项,用于重现因内存压力导致活动被杀死时发生的崩溃。您可以在Apps的{​​{1}}部分找到它。

一旦离开,它就会销毁每个活动。例如。如果您按home将您的应用程序置于后台,则会破坏当前活动。有关详细信息,请参阅https://stackoverflow.com/a/22402360/2833126

答案 2 :(得分:11)

有两种模拟机器人杀戮过程的方法:在开发者设置中使用“不要保持活动”设置或者自己杀死应用程序进程。

要终止此过程,请打开要测试的活动,然后按主页按钮将应用程序发送到后台,然后使用Android Studio中的 DDMS (Android设备监视器),选择该过程然后停止该过程(如下图所示)。你的应用程序被杀了。现在,再次打开您的应用程序(访问打开的应用程序列表)。现在你可以测试被杀死的状态。

enter image description here

答案 3 :(得分:8)

出于调试onRestoreInstanceState()的目的,只需更改屏幕方向(模拟器中的[Ctrl] - [F11])。您的活动将被销毁并重新创建,并且会调用onSaveInstanceState() / onRestoreInstanceState()对。

答案 4 :(得分:4)

使用SetAlwaysFinish应用程序(适用于真实设备和模拟器)或使用Google DevTools应用程序(仅在模拟器中工作)。

这些应用程序使用ActivityManagerNative类的隐藏的AlwaysFinish设置来更改操作系统的行为,并使其在不再处于前台时立即卸载每个活动。这将可靠地触发onSaveInstanceState和onRestoreInstanceState事件。

请参阅以下链接了解更多详情: http://bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/

答案 5 :(得分:4)

要调试 onRestoreInstanceState ,您可以执行以下操作:

  • 确保您可以在启动后立即调试应用程序(从构造函数调用 android.os.Debug.waitForDebugger()帮助,它会挂起您的应用程序,直到连接调试器),< / p>

  • 将应用程序置于某种状态,

  • 设置 - &gt;应用

  • 因果关闭
  • 通过“最近使用的应用”按钮(它仍将在列表中)通常切换回来,

  • 此时您的应用程序将重新启动, onRestoreInstanceState 将立即在顶级活动中调用。

答案 6 :(得分:1)

这里的答案很好。

现在,居住在遥远的未来,在Android Studio中使用Instant Run也会在通过代码更改重新启动活动时触发保存和恢复。

答案 7 :(得分:0)

在Android 6及更新版本中,这是一个不错的解决方案。请在此处查看我的回答:Simulate killing of activity in emulator