Android service组件相关

Service分为Local Service和Remote Service。Local service只允许统一进程内的应用程序进行访问,而远程服务可以通过AIDL技术支持跨进程访问。
服务可以通过 startService(intent)和bindService(intent,serviceconnection,int)启动
startService()通过stopService结束服务,优点是调用简单,方便控制,缺点是启动Service之后除了再次调用或结束服务外就无法对服务内部状态进行操控。
bindService()通过unbindService()结束,优点是运用灵活,可以通过IBinder接口获取Service的句柄进行状态检测。
常见方法
void onCreate()当Service启动时触发,整个生命周期只会触发一次
int onStartCommand(intent, flags, startId)只在startService启动服务时触发,返回值决定服务结束后的处理方式
IBinder onBind(intent)只在bindService时触发,返回一个IBinder对象进行远程操控
void onRebind(intent)startService->bindService->onUnbind(return true)->bindService时调用
boolean onUnbind(intent)unbindService触发此方法,默认为false,
当返回true,下次bindService时会调用onReBind
void onDestroy()1/startService->stopServicee 
2/bindService->unbindService
3/startService->bindService->unbindService->stopService

实现方法
startService比较简单,在activity中new一个Intent,讲activity与自定义的service类名传入startservice中,在自定义的实现service接口的类中重写onCreate,onStartCommand,onDestroy方法。最后需要在AndoridManifest中绑定service。

bindService较复杂,需要用到自定义的实现了serviceconnection接口的类,在这个类里面需要重写两个方法 onServiceConnected和onServiceDisconnected.在系统bindService完成以后,会调用onServiceConnected,用户可以在里面通过IBinder获取service的句柄,可以使用binder来处理service。

public class MyService extends service{
private mybinder mybinder;
public class mybinder extends binder{public myservice getservice(){return myservice.this;}}
public IBinder onBind(intent){return this.mybinder;}
}

public class MyServiceConnection implements ServiceConnection{
onServiceConnected(...,IBinder service){ MyService myservice = ((Myservice.mybinder)binder).getService();}
}

startService与bindService共存时,这时候 Service 的onBind()方法和onUnbind()方法只在第一个bindService流程中触发,其后多次调用bindService(),此事件都不会被触发,而只会触发onServiceConnected()事件。这是因为在默认情况下,系统在绑定时会先搜索IBinder接口,如果Service已经绑定了Binder对象,系统就会直接跳过onBind()方法。解决方案是使用onReBind。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值