Foreground Service(意译为前台服务)并不完全像其意译的意思那样是工作在前台的Service,因为Service实际上始终是工作在后台的。由于Service工作在后台的原因,使用者并不知道它在运行,有时候开发者需要使用者知道某个Service在运行时,就需要设计一种方案来解决这个问题,Foreground Service就出现了。Foreground Service说简单点其实就是在Service开启的时候使用通知(Notification),这也是Android官方推荐的方式,或者一些其它的方式(甚至可以是Activity,但使用Activity是基本没有必要的)来告知用户这个Service正在运行。
所以,要掌握Foreground Service的用法,就不得不先了解一下通知的使用方法。关于通知的使用方法可以参看我的另一篇文章
《Android通知的使用及简单二次封装》
。在文章里,我简单封装了一下Android的通知接口,可以很方便的使用。
接着,只要在程序开启了Service,则使用一个“正在运行”的通知表明服务正在运行就可以了,也就是在Service的onCreate()回调或者onStart()/onStartCommand()(区别详见
《Android Service全解(一)之 startService》
)回调中即可。虽然通知并不是一定需要的,或者说故意不提示用户有服务正在运行(稍稍流氓一点的程序就会这样),但是某些应用商场的应用审核就把通知提示做为了审核项目的。为了在Service周期(Life Cycle)结束的时候通知也能自动消失,所以需要在Service的onDestroy()回调里面写上取消通知的代码。以上就是配合通知自己实现的Foreground Service了。
当然,除了自己处理通知的方法外,Google在Android 2.0(SDK level 5)以上的SDK提供了一个直接而简单的方法。直接使用Service.startForeground()和Service.stopForeground()进行处理(注意,这两个方法是Service类的)。我封装的通知接口genNotification()(详见
《Android通知的使用及简单二次封装》
)在这里可以提供实例通知对象的支持。下面看下Google提供的两个接口:
使用startForeground()之后,给出的Notification对象会发布,使用stopForeground()之后,通知会被撤销,当Service销毁(比如stopService()被调用)之后,通知也会被撤销。stopForeground()仅仅只是去掉service的foreground属性,并不会让service停止。
对于SDK 2.0之前的SDK使用这两个接口,Google也提供了另外的方法,并且使用到了反射机制,可以自行参考Android的官方文档。
使用Android SDK 2.0以上SDK的foreground service的完整工程包可以到
Juwend’s Apps – Demos – Foreground Service
下载学习使用。
Android Service全解(三)之 Foreground Service ——
Juwend
Juwend’s – http://www.juwends.com
笔者水平有限,若有错漏,欢迎指正,欢迎转载以及CV操作,但希注明出处,谢谢!
此条目由
Derek
发表在
Android
分类目录,并贴了
Android
、
Foreground
、
Service
标签。将
固定链接
加入收藏夹。
Service
是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC)。例如,服务可在后台处理网络事务、播放音乐,执行文件 I/O 或与内容提供
程序
进行交互。
这是针对
Android
O上的前台服务的测试应用。 如有任何疑问,请指正。
当机:
android
.app.Remote
Service
Exception:Context.start
Foreground
Service
()然后未调用
Service
.start
Foreground
()。
链接: :
Foreground
Service
(意译为前台服务)并不完全像其意译的意思那样是工作在前台的
Service
,因为
Service
实际上始终是工作在后台的。由于
Service
工作在后台的原因,使用者并不知道它在运行,有时候开发者需要使用者知道某个
Service
...
前台服务(
Foreground
Service
)是一种在
Android
应用
程序
中执行长时间运行任务的服务类型。与普通的后台服务不同,前台服务在系统通知栏中显示一个可见的通知,向用户表明应用
程序
正在进行某项重要的操作,以便用户知晓并提供更好的用户体验。前台服务通常用于执行用户可感知的任务,例如播放音乐、下载文件、进行定位更新等。通过将服务置于前台状态并显示通知,前台服务可以避免被系统误认为是低优先级的后台任务,从而更好地确保服务的稳定运行。
前台服务是那些被认为用户知道(用户所认可的)且在系统内存不足的时候不容许系统
杀死
的服务。前台服务必须给状态栏提供一个通知,它被放到正在运行(Ongoing)标题之下——这就意味着通知只有这个服务被终止或从前台主动移除通知后才能被解除。
Intent
Service
具有以下特点:
(1) Intent
Service
自带一个工作线程,当我们的
Service
需要做一些可能会阻塞主线程的工作的时候可以考虑使用Intent
Service
。
(2) 我们需要将要做的实际工作放入到Intent
Service
的onHandleIntent回到方法中,当我们通过start
Service
(intent)启动了Int...
1.服务是什么(
Service
)
Service
是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC)。例如,服务可在后台处理网络事务、播放音乐,执行文件 I/O 或与内容提供
程序
进行交互。
2.前台服务(
Foreground
Service
)是什么?
前台服务执行一些用户能注意到的操作。例如,音频应用会使用前台服务来播放音频曲目。前台服务必须显示通知
android
10.0录制屏幕报错. Media projections require a
foreground
service
of type
Service
Info.
FOREGROUND
_
SERVICE
一、如何保活后台服务
在
Android
Service
s (后台服务)里面,我们了解了
Android
四大组件之一的
Service
,知道如何使用后台服务进行来完成一些特定的任务。但是后台服务在系统内存不足的时候,可能会被系统
杀死
。那么如何让后台服务尽量不被
杀死
呢?基本的解决思路主要有以下几种:
1. 提高
Service
的优先级:
<!-- 为防止
Service
被系统回收,可以尝试通过提高服务的优先级解决,1000是最高优先级,数字越小,优先级越低 -->
android
:priori.