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

时间:2014-05-29 17:04:56

标签: android service

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

3 个答案:

答案 0 :(得分:19)

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

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

    android:process=":somenamehere"

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

  3. 我希望这会对你有所帮助。

答案 1 :(得分:5)

  

我的意思是我按住主页按钮,然后从app open列表中删除我的活动

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

答案 2 :(得分:0)

编辑:请参阅CommonsWare的回答

旧答案:您应该覆盖public int onStartCommand(Intent intent, int flags, int startId)方法并返回START_STICKY值作为服务模式。

除非您明确致电stopService(Intent)

,否则这会在活动被销毁时甚至退出您的应用时保持您的服务正常工作