【问题标题】:How to stop Android service when app is closed关闭应用程序时如何停止Android服务
【发布时间】:2015-06-02 02:48:45
【问题描述】:

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

我在主要活动的onCreate() 方法中使用startService() 方法,在onDestroy() 方法中使用stopService()

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

只有在用户手动停止应用时,我才能停止我的服务?

【问题讨论】:

  • 用户不会真正关闭 Android 中的应用程序。 “用户关闭应用”是什么意思?
  • 我的意思是故意关闭应用程序。用户在“最近的应用”屏幕上刷出应用后。

标签: android service android-service


【解决方案1】:

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

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

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

【讨论】:

  • 就我而言,它不起作用,因为我正在使用 AlarmManager 启动服务。但它似乎是例如在活动中打开服务的情况的正确答案。
  • 谢谢!你拯救了我的一天!
  • 我希望在应用程序从最近的任务中清除后停止我的服务。 stopWithTask="true" 在这种情况下有效。但我不希望我的服务在我们通过后按退出应用程序时关闭。我该怎么做?
  • @WijaySharma 查看 Android 前台服务
  • 应用退出时我忽略了停止服务。所以下次运行时,有两个服务副本正在运行。令人讨厌的错误接踵而至!
【解决方案2】:

我的意思是故意关闭应用程序。用户在“最近使用的应用”屏幕上刷出应用后。

就 Android 而言,这不是“关闭应用程序”。那就是“删除任务”(或者有时是“停止任务”——谷歌在术语上并不是很一致)。

当任务被删除时,您的服务应该被称为with onTaskRemoved()。但是,当用户通过概览屏幕(也称为最近任务列表)手动删除任务时,以及由于任务太旧而在 Android 4.4 及更低版本上自然而然地消失时,这都应该是这样。

【讨论】:

  • Android 中的术语不一致让我抓狂...:/
【解决方案3】:

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

android:configChanges="keyboardHidden|orientation"

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

【讨论】:

    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多