1、Service启动模式有哪些,对应的生命周期?IntentService呢?
2.Binder机制
binder机制是android端进程间通信的基石,采用aidl的ipc通信方式,我们可以利用它来定义两个进程相互通信的接口。他是基于Service实现的一种线程间通信机制。它的本质是C/S架构的,需要一个服务器端,一个客户端。
AIDL通信方式里面有四个对象,一个是IInterface,专门用来负责接口的调度,Stub用来负责通信的响应和发送给service端的数据,Proxy负责两个进程通信的包装,算是间接调用Stub的包装类,service是服务端处理数据的关键类。用一张图来表示如下:
3、如何让Service为单独的进程
4、IntentService的实现原理
5、Service创建为单独进程会有哪些问题
6、简述AIDL的构建过程
7、IPC机制有哪些
8、android多进程通信方式,内部原理
9、什么是 IntentService?有何优点?
IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能。先看 Service 本身存在两个问题:
Service 不会专门启动一条单独的进程,Service 与它所在应用位于同一个进程中; Service
也不是专门一条新线程,因此不应该在 Service 中直接处理耗时的任务;复制代码 IntentService 特征 会创建独立的
worker 线程来处理所有的 Intent 请求; 会创建独立的 worker 线程来处理
onHandleIntent()方法实现的代码,无需处理多线程问题; 所有请求处理完成后,IntentService 会自动停止,无需调用
stopSelf()方法停止 Service; 为 Service 的 onBind()提供默认实现,返回null; 为 Service 的
onStartCommand 提供默认实现,将请求 Intent 添加到队列中;
10、IntentService
IntentService是google在原生的Service基础上通过创建子线程的Service。也就是说IntentService是专门为android开发者提供的能在service内部实现耗时操作的service。我们可以通过重写onHandleIntent方法实现耗时操作的回调处理,而且IntentService在耗时操作完成后,会主动销毁自己,IntentService可以通过多次启动来完成多个任务,而IntentService只会被创建一次,每次启动的时候只会触发onStart方法。内部是实现了Handler异步处理耗时操作的过程,一般多用在Service中需要处理耗时操作的功能。
提问:为什么IntentService中能实现耗时操作?
在onCreate中,通过HandlerThread来开启一条线程,而HandlerThread线程中会跟我们平常用的Handler不太一样,在run方法中创建了looper对象,所以HandlerThread能让IntentService在子线程中使用handler达到耗时操作。