同进程Activity调用Serivce中函数(学习笔记四)
Activity与Service间通信的代码不是没写过,但是并没有了解过为啥会这样写,先记录一下。
首先得先了解一下AMS,AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。
1、IBinder存在的意义,myActivity和myService是谁来创建的?
Activity和Service都是嫡系基类,它们都是都会AMS来创建的,所以我们必须
得取到指针才拿的到。
、
2、如何跟AMS要对象的指针呢?
第一个方法:通过静态函数可以得到
第二个方法***:通过IBinder接口来取得myService对象的指针
复习一下,IBinder接口
activity可以通过接口来调用service中的方法
3、解决方法
在主线程中完成这个目标
1、取得myService对象
通过startService,bindService向AMS沟通
2
、
整体结构:
具体代码实现:
当activity执行bindService的时候,Service中的onBinder方法也会执行并且将IBinder传回到AMS中,
AMS会把它传过来并转成myBinder形式,通过子类的指针就把IS接口传回来了。
耗时操作避免放在子线程中,在子线程中完成目标
分析结构图如下: