绑定服务总是前景吗?

时间:2017-10-16 02:17:21

标签: android foreground-service

我需要为我的应用启动foreground service以便它继续运行,即使应用程序在后台也不太可能被杀死。这是一种方法startForeground

我还需要与服务进行通信,所以我收集最简单的选项就是绑定它(我计划在同一个进程中运行它,以便能够将返回的IBinder强制转换为我的类而且只是调用它的方法)。但是,我无处可以找到有关绑定foreground services的信息。

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

这是否意味着默认情况下每个bound service也是一个foreground,它需要通知等(文档实际上从未提及它,所以我猜不是)?

如果我的应用使用了前台服务,应用会在后台被杀吗?

1 个答案:

答案 0 :(得分:3)

好吧,我们来谈谈服务。服务可以开始绑定两者。所以你实际上可以在它之后创建 startService()并生成 startForeground(),但是当你要去 bindService()时,你可以删除通知并使服务不是前台(对于这种情况,似乎标记为BIND_NOT_FOREGROUND)。绑定服务本身不是前台(它们具有绑定到服务的组件的优先级)。正如我所知,要创建前台绑定服务,你不能只调用 startForeground()(它不会工作,状态栏中不会添加任何通知),所以唯一的方法就是制作 startService() onStartCommand()处理仅执行 startForeground()的操作。

因此默认绑定服务不是前台,您不需要通知。系统或用户可以在应用程序的设置中随时终止您的应用程序(强制停止),但如果您想让系统知道您的服务对用户和应用程序非常重要,那么您可以将其设置为前景,以便系统不会触摸它直到系统有足够的内存供您的进程使用。