Android 如何模拟杀戮活动以节省内存?
安卓医生说: 当系统而不是用户关闭某个活动以节省内存时Android 如何模拟杀戮活动以节省内存?,android,activity-lifecycle,onrestoreinstancestate,Android,Activity Lifecycle,Onrestoreinstancestate,安卓医生说: 当系统而不是用户关闭某个活动以节省内存时 但是如何模拟这种情况呢?我想调试onRestoreInstanceState(Bundle)方法,但不知道如何调试。为了调试onRestoreInstanceState(),只需更改屏幕方向([Ctrl]-[F11]在模拟器中)。您的活动将被销毁并重新创建,并且将调用onSaveInstanceState()/onRestoreInstanceState()对。使用SetAlwaysFinish应用程序(在真实设备和模拟器中工作)或使用Go
但是如何模拟这种情况呢?我想调试onRestoreInstanceState(Bundle)方法,但不知道如何调试。为了调试
onRestoreInstanceState()
,只需更改屏幕方向([Ctrl]-[F11]在模拟器中)。您的活动将被销毁并重新创建,并且将调用onSaveInstanceState()
/onRestoreInstanceState()
对。使用SetAlwaysFinish应用程序(在真实设备和模拟器中工作)或使用Google DevTools应用程序(仅在模拟器中工作)
这些应用程序使用ActivityManager活动类的hidden AlwaysFinish设置来更改操作系统的行为,并使其在每个活动不再位于前台时立即卸载。这将可靠地触发onSaveInstanceState和onRestoreInstanceState事件
有关更多详细信息,请参阅下面的链接:
你不能用自动化的方式来做这件事b/c它是完全不确定的 请参阅我的答案:有关详细信息 但好消息是,您只需模拟调用saveInstanceState,就可以间接测试这种内存不足的情况 onSaveInstanceState可通过以下方式触发:
- 确保您可以在应用程序启动后立即对其进行调试(从构造函数帮助中调用android.os.debug.waitForDebugger(),它将挂起应用程序,直到调试器连接为止)
- 让你的申请处于某种状态
- 从设置->应用程序中因果杀死它
- 通过“最近的应用”按钮(它仍将在列表中)因果切换回它
- 此时,您的应用程序将重新启动,并且将立即在顶部活动上调用onRestoreInstanceState
Settings->Developer Options
的Apps
部分找到它
一旦你离开它,它就会摧毁一切活动。例如,如果按home键将应用程序置于后台,则当前活动将被销毁。有关更多信息,请参阅。有两种方法可以模拟android杀戮过程:在开发者设置中使用“不保留活动”设置,或者自己杀戮应用程序过程 要终止进程,请打开要测试的活动,然后按home按钮将应用程序发送到后台,然后使用Android Studio(Android设备监视器)中的DDMS,选择进程,然后停止进程(如下图所示)。你的应用程序被杀了。现在,再次打开你的应用程序(访问打开的应用程序列表)。现在您可以测试被杀死的状态 这里有很好的答案
现在,在遥远的将来,在Android Studio中使用Instant Run还将在重新启动活动并更改代码时触发保存和恢复 Android 6及更新版本中有一个不错的解决方案。在这里查看我的答案:这不适用于单独控制方向或具有固定方向的应用程序。以及如何在设备上测试。目前没有可用的模拟器,因此必须在实际设备上进行测试。另外,如果某个活动仅声明纵向,则更改方向不是选项。@f470071:“以及如何在设备上测试”——旋转设备。或者更改区域设置。或者在Android 4.0+设备上更改字体比例。“目前没有可用的模拟器,所以测试必须在实际设备上进行”——Android SDK模拟器适用于许多开发人员;其他人则使用Genymotion。Android SDK模拟器是一种降低速度的方法。无法在Genymotion上安装Google Play服务。这就是为什么测试是如此令人沮丧的折磨。旋转设备不是选项,因为活动设置为固定方向。终止活动。好。不会重新启动应用程序并重新启动到上次打开的活动-我们真正需要测试的是测试实际场景。谢谢!也可以在Android监视器窗口中完成,红色的终止应用程序按钮遵循相同的过程哇,你刚刚帮我重现了一堆奇怪的错误,这些错误总是发生在客户端的设备上,从来没有发生在我的设备上!单独设置“不保留活动”似乎不同于终止流程。它不会重新创建应用程序对象,因此假设存储在应用程序对象中的“全局”状态的活动很可能会崩溃。