2010-03-01 33 views
25

的Android DOC说:如何模拟查杀活动以节省内存?

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

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

回答

7

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

+2

这对于自行控制方向或固定方向的应用程序无效。 – gotube 2014-10-13 06:01:29

+0

以及如何在设备上进行测试。目前没有可用的仿真器,因此测试必须在实际设备上进行。此外,如果活动仅声明肖像,则更改方向不是一种选择。 – f470071 2017-04-29 19:13:36

+0

@ f470071:“以及如何测试设备” - 旋转设备。或更改区域设置。或者更改Android 4.0+设备上的字体比例。 “目前没有可用的仿真器,因此测试必须在实际设备上进行” - Android SDK仿真器适用于许多开发人员;其他人使用Genymotion。 – CommonsWare 2017-04-29 19:27:43

4

使用SetAlwaysFinish应用程序(适用于真实设备和仿真器)或使用Google DevTools应用程序(仅适用于仿真器)。

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

请参阅下面的详细信息链接: http://bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/

25

你不能做到这一点以自动化的方式B/C的完全不确定性。

查看我的答案:https://stackoverflow.com/a/15048112/909956了解详情。

但好消息是,你所需要做的只是模拟调用onSaveInstanceState,而你正在间接测试这种低内存情况。

  1. 失去焦点(按家庭这在本质上就像是从你的应用程序切换到桌面应用),推出的另一项活动,按最近用过
  2. 改变方向:

    可以的onSaveInstanceState被触发。这是更简单的方法,如果你正在使用一个模拟器

  3. 改变开发人员设置:转到开发人员选项 - >应用程序 - >不要保持活动。如果您正在实际设备上临时测试,这是最佳选择。
+9

#3对我很好。谢谢! – dennisdrew 2014-05-30 18:38:47

3

要调试onRestoreInstanceState你可以做到以下几点:

  • 确保您可以将其启动(调用android.os.Debug之后调试应用程序。了waitForDebugger()从你的构造帮助,它挂起你的应用程序,直到调试器连接),

  • 把你的应用程序在某些状态下,

  • 因果杀死它从设置 - >应用程序

  • 通过最近的应用程序按钮(它仍然会在列表中)切换回它,

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

14

我已经使用“不要保留活动”开发者选项来重现当活动因内存压力而死亡时发生的崩溃。您可以在Settings->Developer OptionsApps部分找到它。

只要你离开它,它就会破坏活动。例如。如果按Home将您的应用程序置于后台,则当前活动将被销毁。有关更多信息,请参阅https://stackoverflow.com/a/22402360/2833126

+2

杀死活动。好。不重新启动应用程序并重新启动到上次打开的活动 - 我们真正需要测试以测试实际方案。 – maxweber 2015-06-02 00:23:43

+0

太好了,非常感谢 – 2015-10-21 13:34:46

10

有两种方法可以模拟android查杀过程:在开发人员设置中使用设置“不要保留活动”或自行终止应用程序进程。

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

enter image description here

+1

谢谢!也可以在Android监视器窗口中使用红色的终止应用程序按钮完成相同的过程 – 2017-01-25 08:30:11

+0

哇你刚刚帮助我重现了一系列总是发生在客户端设备上并且从未在我的设备上发生的奇怪错误!单独设置“不要保留活动”似乎与杀死流程不同。它不会重新创建应用程序对象,因此假定存储在应用程序对象中的有关“全局”状态的活动很可能会崩溃。 – jadkik94 2017-02-15 15:58:09

1

很好的答案。

现在,居住在遥远的将来,使用Android Studio中的即时运行功能还会在代码更改重新启动活动时触发保存和恢复。