服务是Android四大组件之一,同时也是四大组件中和活动最相似的组件,都代表着可执行的程序,他们的区别在于服务一直在后台运行,没有用户界面,一旦被启动就和Activiy一样拥有生命周期,一般来说,需要显示界面则使用活动,不需要则可以选择服务
活动的生命周期在于用户打开与关闭,从用户打开程序到用户关闭程序之间存在,那么服务呢?他的生命周期在于什么,是否也是在用户的打开与关闭,服务能否一直存在于后台
一般情况下,只有系统自带的应用或者厂商定制的应用拥有比较高的优先级能够保持后台服务一直运行,也就是,可以通过根后给予相应高的权限,理论上可以做到一直存在于后台的服务,那么对于未根的系统呢?
这时候就需要一些小技巧和方法
-
<李>
监听开机事件,显式启动后台服务,设置优先级,使用AlarmManager发送定时任务检查是否运行,如果不允许就重新启动
李> <李>把服务和活动分开,让服务开机启动。设置一个broadcast 接收器接受开机信号,使用RECEIVE_BOOT_COMPLETED的许可,,然后启动service.activity启动后绑定到服务上,通过ipc机制通信、工程结束后松了绑。注意安装后要手动启动服务,不会自动启动,之后重启手机后才会随开机启动。
李> <李>在内存低的时候系统会自动清理进程,这时候后台服务可能会被杀掉。可以在onStartCommand中返回START_STICKY,这样系统有足够多资源的时候,就会重新开启服务。
使用startForeground启动后台服务”前台运行”的优先级,类似于手机的音乐播放软件,在打开音乐播放软件时会在通知栏显示一条播放进度通知条,因为它能够使后台服务获取到前台的优先级权限从而避免被系统干掉,这种做法也是官方所推荐的
李>
<强>”A started  service 还要use 从而startForeground (int,通知),API 用put 从而service 拷贝A foreground 状态,,where 从而system considers it 用be something 从而user is actively aware of 以及thus not A candidate for killing when low 提醒记忆只(it is  still theoretically possible for 从而service 用be killed under extreme memory pressure 得到,current foreground 应用程序,,but 拷贝practice 却;能够should not be A 关注。)”强>
也就是说,其实第四种方法更为方便并且被官方所推荐
而 )即可实现