41

安卓文档说:

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

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

4

8 回答 8

35

你不能以自动化的方式做到这一点,因为它完全是不确定的。

请在此处查看我的答案:https ://stackoverflow.com/a/15048112/909956了解详细信息。

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

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

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

我使用“不保留活动”开发人员选项来重现由于内存压力导致活动被终止时发生的崩溃。您可以在 的Apps部分中找到它Settings->Developer Options

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

于 2015-03-05T21:52:49.920 回答
13

有两种方法可以模拟android杀进程:使用开发者设置中的“不保留活动”设置或自行杀掉应用进程。

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

在此处输入图像描述

于 2016-06-22T20:52:31.837 回答
10

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

于 2010-03-01T14:10:20.897 回答
4

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

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

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

  • 因果从Settings->Apps杀死它,

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

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

于 2014-07-03T13:20:46.643 回答
4

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

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

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

于 2011-12-23T22:58:44.600 回答
1

这里有很好的答案。

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

于 2017-05-12T03:53:45.210 回答
0

在 Android 6 和更新版本中有一个不错的解决方案。在这里查看我的答案:模拟在模拟器中杀死活动

于 2017-09-16T00:11:47.877 回答