如何终止 android 服务?

How to kill an android service?

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

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

我的意图是,如果服务因内存压力而被 Android 终止,则应该调用它。

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

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

onDestroy 是用于服务关闭状态保存的明智站点吗?

如果是这样,我如何才能让 Android 调用服务的 onDestroy,以达到 debugging/testing 的目的?

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

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

强制停止不会在任何组件上调用 onDestroy,无论是服务还是 activity。它完全关闭了应用程序,没有任何进一步的考虑。

我不确定,但如果您的服务不是 运行 作为前台服务,您可以通过从最近的应用程序菜单中删除该应用程序来关闭它。

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

如果你想保存服务状态,你应该随时保存(例如播放器服务可以在 play/pause 功能激活时保存),或者使用定时器定期保存。

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

希望这对您有所帮助。