android - 服务在活动被销毁时停止

ric*_*ert 14 service android

当我打开项目的活动时,我调用该startService(Intent intent)方法来启动一个新的服务.当活动被销毁时,不应该杀死服务(因为我没有使用该bindService()方法),但事实是,当我关闭我的活动时,服务被终止,一秒钟后系统创建一个新的服务(我验证了)那个,系统再次调用onCreate()我的服务方法).我只需要保留一项服务怎么办?谢谢

Mig*_*tón 20

要让服务独立于应用程序的主要流程运行,并确保Android在执行某些操作时不会将其杀死,您应该做/尝试两件事.

  1. 在单独的过程中运行您的服务.您可以通过在清单中的服务声明中添加以下属性来实现此目的:

    android:process=":somenamehere"

  2. 当您的服务正在运行并且您不希望它被操作系统杀死时,您必须使用该startForeground(int id, Notification notification)方法.当服务完成正在进行的操作并且可以被操作系统杀死时,请致电stopForeground(boolean removeNotification)."startForeground"需要通知作为参数,因为每个前台服务必须显示通知,以便用户意识到它

我希望这可以帮助你.


Com*_*are 5

我的意思是我按住主页按钮,然后从应用程序打开列表中删除我的活动

这不会"关闭"一项活动.这会终止你的过程.欢迎用户在用户需要时终止您的流程,无论是通过这种方式还是通过第三方任务管理器应用程序.您无能为力 - 您无法阻止用户终止您的流程.由于您的过程也会因其他原因(例如,纯粹的年龄)停止,因此您有充分的理由来处理此案例.

  • @rickyalbert:"app kepps跟踪你的位置(有一个通知提醒你)" - 他们正在使用`startForeground()`."并且只有当您返回活动时才能停止服务" - 用户可以通过多种方式停止前台服务,其中大部分都不涉及"返回活动停止". (3认同)
  • @rickyalbert:您的进程可以随时终止,出于任何原因,由用户或 Android 自行终止。这就是 Android 提供粘性服务的原因,您的服务可能会在进程终止后稍后重新启动。这是您所看到的行为。您需要调整您的应用程序逻辑以处理此问题。仅仅因为 *你* 希望用户通过你的 UI 停止你的服务对用户来说并不重要。 (2认同)