Android(5)Service总结

Service创建过程

service一共有两种启动方式,一种为Bind绑定方式,这种方式一般用于与其他组件之间的交互,另一种方式是启动方式Start,这种方式一般用于执行后台任务。当然你也可以两种方式一起使用。


startService

Service的创建使用ContextImpl,通过调用它的房网完成第一步操作。
之后会调用AMS的startService,然后是ActiveServices,这个类是辅助AMS管理Service的类。
随后调用app.thread的scheduleCreateService方法,此方法中会通过H向ActivityThread发送Message,之后转至ActivityThread中进行处理,方法为ActivityThread的handleCreateService,可以看出和Activity的创建过程很像。


bindService

bindService和startService的差别还是很大的,因为bindSevice在完成绑定之后,Service会返回一个Binder对象,客户端通过ServiceConnection获得该对象完成与Service通信。
具体差别在AMS调用的不是startService而是其bindService方法,而在这之前,系统自动为我们将ServiceConnection包装为ServiceDispather
由于Service可能不在同一个进程中,如果完成绑定则需要跨进程回调ServiceConnection的onServiceConnected方法,故这里需要一个Binder,而ServiceDispather的内部类InnerConnection正好充当了这个Binder。
之后还是ApplicationThread中通过H发送Message。
在ActivityThread的handleBindService方法中完成Service的创建,并且调用Service的onBind方法,将返回的Binder通过AMS的publishService方法完成调用客户端的onServiceConnected。

Service s = mService.get(data.token);
//省略
IBinder binder = s.obBind(data.intent);
ActivityManagerNative.getDefault().publishService(data.token, date.intent, binder);
//AMS的publishService会通过InnerConnection方法调用ServiceConnection的onServiceConnected方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值