StartService
时序图
核心代码
startServiceLocked
1 | ComponentName startServiceLocked(IApplicationThread caller, Intent service, String resolvedType, |
bringUpServiceLocked
1 |
|
CreateService
时序图
核心代码
handleCreateService
1 | private void handleCreateService(CreateServiceData data) { |
BindService
时序图
核心代码
publishServiceLocked
1 | void publishServiceLocked(ServiceRecord r, Intent intent, IBinder service) { |
doConnected
1 |
|
Question
为什么不直接用线程?
- Service属于后台服务,独立与Activity,可以认为后者属于前台服务。在这样的界定下,不论Activity是被销毁或者被关闭,只要对应进程还在,Service就还在,这一点是Thread所达不到的。
- 可以通过process=”:remote”新建独立进程.
- 可以实现在多Activity之间共享服务数据.
多应用如何共享一个服务?
- 隐式的声明服务端的Intent。
- 将服务端的iadl文件,保留包路径的方式拷贝到自己的工程中。
- 在onServiceConnected的回调中生成远端Service实例,从而调用服务的接口。
如何提高服务的优先级,防止被杀?
内存不足的时候,Android会回收一些后台应用;所以Service中提供了
startForeground(int id, Notification notification)类似的方法,使得将后台应用
关闭的权利交给用户.利用类似后台更新前台ui的方式,可以提高服务的优先级。