如何在应用程序关闭时停止 Android 服务

How to stop Android service when app is closed

我正在努力 运行 持续保持服务,直到用户关闭应用程序。

我正在使用 onCreate() 方法中的 startService() 方法 activity 和 onDestroy() 方法中的 stopService() 方法。

现在我遇到了问题,因为当我旋转设备或关闭屏幕时,我的主要 activity 似乎死了并重新创建。

如何仅在用户手动停止应用程序时停止我的服务?

首先将 android:configChanges 节点添加到 Activity 的清单节点,以在设备旋转时停止重启 activity。

android:configChanges="keyboardHidden|orientation"

现在为了检测关闭应用程序事件,想一想用户可以手动关闭应用程序的方式。在 android 中,按后退按钮或主页按钮。 因此,为后退和主页按钮放置一个事件键监听器并终止服务。

I mean intentional app close. After user swipe out app on "recent apps" screen.

就Android而言,这不是"closing the app"。那就是 "removing the task"(或者有时 "stopping the task"——Google 在术语上不是很一致)。

删除任务后,您的服务应该被调用 with onTaskRemoved()。但是,当用户通过概览屏幕(a.k.a.,最近任务列表)手动删除任务时,以及当任务在 Android 4.4 及以下版本自然消失时,这应该是因为任务是太老了。

在清单文件的服务标签中设置以下属性,

<service android:name="service" android:stopWithTask="true"/>

添加此项将在删除任务时调用服务的 ondestroy()(应用从最近的应用列表中关闭)。