如何让Android的service一直在后台运行?-创新互联

Service是Android四大组件之一,同时也是四大组件中和Activity最相似的组件,都代表着可执行的程序,他们的区别在于Service一直在后台运行,没有用户界面,一旦被启动就和Activiy一样拥有生命周期,一般来说,需要显示界面则使用Activity,不需要则可以选择Service

创新互联公司是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括成都做网站、网站制作、电商网站制作开发、重庆小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!

Activity的生命周期在于用户打开与关闭,从用户打开程序到用户关闭程序之间存在,那么Service呢?他的生命周期在于什么,是否也是在用户的打开与关闭,Service能否一直存在于后台

一般情况下,只有系统自带的应用或者厂商定制的应用拥有比较高的优先级能够保持后台服务一直运行,也就是,可以通过root后给予相应高的权限,理论上可以做到一直存在于后台的服务,那么对于未root的系统呢?

这时候就需要一些小技巧和方法

  • 监听开机事件,显式启动后台服务,设置优先级,使用AlarmManager发送定时任务检查是否运行,如果不允许就重新启动

  • 把service和activity分开,让service开机启动。设置一个broadcast receiver接受开机信号,使用RECEIVE_BOOT_COMPLETED的permission, 然后启动service。activity启动后绑定到service上,通过ipc机制通信,acitivity结束后松绑。注意安装后要手动启动service,不会自动启动,之后重启手机后才会随开机启动。

  • 在内存低的时候系统会自动清理进程,这时候后台service可能会被杀掉。可以在onStartCommand中返回START_STICKY,这样系统有足够多资源的时候,就会重新开启service。

  • 使用startForeground启动后台服务“前台运行”的优先级,类似于手机的音乐播放软件,在打开音乐播放软件时会在通知栏显示一条播放进度通知条,因为它能够使后台服务获取到前台的优先级权限从而避免被系统干掉,这种做法也是官方所推荐的

“A started service can use the startForeground(int, Notification) API to put the service in a foreground state, where the system considers it to be something the user is actively aware of and thus not a candidate for killing when low on memory. (It is still theoretically possible for the service to be killed under extreme memory pressure from the current foreground application, but in practice this should not be a concern.)”

也就是说,其实第四种方法更为方便并且被官方所推荐

而 startForeground 的使用也是很简单的,只需要修改onCreat的内容,在其中创建Notification对象,然后用调用 startForeground(1, Notification)即可实现


新闻名称:如何让Android的service一直在后台运行?-创新互联
网站地址:http://scyanting.com/article/djihih.html