Android Service梳理

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的引用,避免内存泄漏发生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值