Service

Service

一、声明
需要在清单中声明,但是如果不声明不会崩溃,只会抛出异常。
android:exported true则允许外部调用
android:process 指定进程名称
二、启动模式
1:startService
onCreate(只执行一次)-onStartCommand(启动多次执行多次)-onDestory(调用stopSelf或stopService,强制kill时不会执行)

onStartCommand(Intent intent,int flag,int startId):
flag:控制内存不足是是否重启Service以及是否保留最后一个非空intent。
startId:每执行一次加1。

2:bindService
onCreate(只执行一次)-onBind(单个客户只能绑定一次,可被多个客户绑定,可通过iBinder接口进行通信)-onUnBind(解除绑定,如果当前没有绑定则会崩溃。如果返回true,则下次绑定是执行onReBind而不是onBind)-onDestory(在所有客户全部解绑后销毁,强制kill时不会执行)

同进程通信:继承Binder
onBind中会返回IBinder对象。而Client需要实现ServiceConnection接口。
不同进程通信(ipc):Messenger
双方都需要创建Messenger对象,在onBind时返回Messenger的getBInde对象,获取时通过new Messenger(binder)创建对象。与Handler进行绑定,从而进行双向通信。

*可以于一个已经启动的Service进行绑定,但是销毁时必须执行onStopSelf或stopService,以及onUnBInd。

前台Service:
不容易被杀死,会在通知栏显示。只需要在onCreate中创建Notification对象并调用startForcground方法。
IntentService:
主要用于处理长期的任务。默认会在自线程中执行,在执行完毕后会自动销毁。需要实现onHandlerIntent方法。

保证不被杀死:
1:startCommend中的flag,START_STICKY,在内存不足时重启,但是传入为null的intent;START_NOT_STICKY,在内存不足时不重启;START_REDELIVER_INTENT:在内存不足时重启,传入最后一个intent。
2:android:priority:1000 提高优先级
3:设置为前台Service。
4:onDestory中启动。
5:Broadcast监听系统广播判断Service并重启。
6:守护进程。开启两个Service并判断对方是否被杀死,会消耗资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值