如何杀死Android服务?

时间:2015-09-16 20:10:50

标签: android service kill

我正在编写一个具有长期服务的应用程序。

我已在服务的onDestroy方法中编写了一些状态保存代码。

我的意图是,如果服务因内存压力而被Android杀死,应该调用此方法。

如何模拟被内存压力杀死的服务?

我已尝试adb shell am force-stop com.example.app,但未调用服务的onDestroy方法。

onDestroy是服务关闭状态保存的合理站点吗?

如果是这样,我如何才能调用Android的onDestroy服务,以进行调试/测试?

3 个答案:

答案 0 :(得分:6)

您不应该依赖onDestroy(),因为它只会在服务正常停止时调用(通过调用stopService()stopSelf()方法)。

如果你想保存服务状态,你应该保存它(例如,当播放/暂停功能被激活时,播放器服务可以存储它),或者使用计时器定期保存它。

如果您想对内存事件做出反应,那么当Android需要更多内存时,您应该使用ComponentCallbacks2类来通知您。如果你在这些回调中释放内存,你将增加服务在内存中停留的可能性。

希望这会有所帮助。

答案 1 :(得分:1)

强制停止不会在任何组件上调用System.IO.File.Create(path).Dispose(); ,也不会调用服务或活动。它完全关闭应用程序而无需进一步考虑。

我不确定这一点,但如果您的服务没有作为前台服务运行,您可以通过从最近的应用菜单中移除该应用来关闭它。

答案 2 :(得分:0)

如果您想在Service内以编程方式停止Service,请致电stopSelf()

或者转到应用程序设置并强制停止。