2017-10-16 78 views
2

我需要为我的应用启动一个foreground service,以便它继续运行,即使应用在后台也不会被杀死。这是一种方法,startForeground。我还需要与服务进行通信,所以我收集最简单的选项将绑定到它(我计划它在相同的过程中运行,以便能够将返回的IBinder投给我的类,只需调用它的方法)。然而,我无处可以找到有关绑定foreground services的信息。绑定的服务总是前台?

通读文档和教程我发现信息bindService的其中一个标志是https://developer.android.com/reference/android/content/Context.html#BIND_NOT_FOREGROUND,以防止服务获得前台优先级。

这是否意味着默认情况下每个bound service也是一个​​之一,它需要通知等(文档从未真正提到过,所以我猜不是)?

如果我的应用程序使用前台服务,应用程序可以在后台被杀死吗?

回答

2

好吧,让我们来谈谈服务。服务可以是开始,约束他们二人。所以,你实际上可以使startService()startForeground()后,但是当你要bindService(),您可以删除通知,并对服务不前景(好像标志BIND_NOT_FOREGROUND针对这种情况)。绑定服务本身并不是前景(它们具有绑定到服务的组件的优先级)。因为我知道要做前台绑定服务,所以不能仅仅调用startForeground()(它不会工作,不会在状态栏中添加任何通知),所以唯一的方法是使startService()和in onStartCommand()只会执行处理操作startForeground()

因此默认绑定服务不是前台,你不需要通知。系统或用户在任何时候都可以通过应用程序的设置(强制停止)杀死您的应用程序,但是如果您想让系统知道您的服务对用户和应用程序非常重要,则可以将其设置为前台,以免系统无法触及直到系统有足够的内存用于你的进程。