1、Context.startService()
生命周期
onCreate、onStartCommand、onDestroy
停止service对应方法 stopService、stopSelf
START_STICKY
正常情况下只有当手动调用stopSelf或者stopService时才会关闭,内存不足关闭后会自动重启
START_NOT_STICKY、
只有当前进程保持接收命令的时候才会保持存活,内存不足关闭后,不会重新启动
START_REDELIVER_INTENT
只有当前进程保持接收命令的时候才会保持存活,内存不足关闭后,不会重新启动,不会重新调用onS tartCommand
2、Context.bindService()
生命周期
onCreate、onBind、onUnbind、onDestroy
通过startService与bindService开启服务区别
startService启动的service,在service启动后进程的级别会比屏幕上的进程级别低,在内存不足时会被回收
bindService启动的service,service启动后进程级别不会降低,当绑定service的client可见时,service会处于可见进程状态,不会轻易被系统回收,也可以通过指定bindService的FLAG,该Flag是context中的,防止由于内存不足导致被回收掉,也可以通过startForeground(int, Notification),开启一个前台处于前台的service,防止被回收掉
bindService的Flag
BIND_ABOVE_CLIENT
service的进程级别比app更加高,内存不足时在杀死service前,会先关闭app
BIND_ALLOW_OOM_MANAGEMENT
内存不足时,不会立即回收该service,会持续存活一段时间,如果仍内存不足会回收掉该service
BIND_WAIVE_PRIORITY
不受进程的优先级和内存管理约束,直接取决于后台LRU算法回收策略
BIND_IMPORTANT
service会被提升到可见进程级别,除了内存严重不足情况下,不会被系统回收掉
BIND_ADJUST_WITH_ACTIVITY
service根据绑定activity的进程级别进行调整,可以理解为与该activity进程相同
另外还有其他的FLAG不常用,需要的时候再看源码好了,具体如下:
BIND_IMPORTANT_BACKGROUND、BIND_ALLOW_WHITELIST_MANAGEMENT、BIND_FOREGROUND_SERVICE_WHILE_AWAKE、BIND_FOREGROUND_SERVICE、BIND_TREAT_LIKE_ACTIVITY、BIND_VISIBLE、BIND_SHOWING_UI、BIND_NOT_VISIBLE
、BIND_EXTERNAL_SERVICE、RECEIVER_VISIBLE_TO_INSTANT_APPS
3、其他方法
onDestroy() // service销毁时调用
onConfigurationChanged(Configuration newConfig) // 屏幕转换调用
onLowMemory() // 内存不足时调用
onTrimMemory(int level) // 根据内存不足等级level进行释放
public abstract IBinder onBind(Intent intent);// 获取Ibinder对象
onUnbind(Intent intent)// 接收unBind回调
默认返回false如果需要接收onRebind的回调,可以改为返回true
onRebind(Intent intent) // 只有onUnbind返回true的时候并且service重新绑定的时候才会调用
onTaskRemoved(Intent rootIntent) // 只有当service运行着并且任在service中被移除时才会调用
stopSelf() // 停止当前正在运行的service
stopSelfResult(int startId) // 用于接收上一个开启的服务是否被终止的结果 Returns true if the startId matches the last start request and the service will be stopped, else false.
startForeground(int id, Notification notification) // 开启前台service,但是使用前要先调用startService
stopForeground(boolean removeNotification) // 停止前台服务
detachAndCleanUp() // 清除service的引用,避免内存泄漏发生