我正在编写一个具有长期服务的应用程序。
我已在服务的onDestroy
方法中编写了一些状态保存代码。
我的意图是,如果服务因内存压力而被Android杀死,应该调用此方法。
如何模拟被内存压力杀死的服务?
我已尝试adb shell am force-stop com.example.app
,但未调用服务的onDestroy
方法。
onDestroy
是服务关闭状态保存的合理站点吗?
如果是这样,我如何才能调用Android的onDestroy
服务,以进行调试/测试?
答案 0 :(得分:6)
您不应该依赖onDestroy()
,因为它只会在服务正常停止时调用(通过调用stopService()
或stopSelf()
方法)。
如果你想保存服务状态,你应该保存它(例如,当播放/暂停功能被激活时,播放器服务可以存储它),或者使用计时器定期保存它。
如果您想对内存事件做出反应,那么当Android需要更多内存时,您应该使用ComponentCallbacks2
类来通知您。如果你在这些回调中释放内存,你将增加服务在内存中停留的可能性。
希望这会有所帮助。
答案 1 :(得分:1)
强制停止不会在任何组件上调用System.IO.File.Create(path).Dispose();
,也不会调用服务或活动。它完全关闭应用程序而无需进一步考虑。
我不确定这一点,但如果您的服务没有作为前台服务运行,您可以通过从最近的应用菜单中移除该应用来关闭它。
答案 2 :(得分:0)
如果您想在Service
内以编程方式停止Service
,请致电stopSelf()
。
或者转到应用程序设置并强制停止。