Android学习笔记【08】【四大组件之服务】

一、进程的概念

四大组件都运行在主线程中

官方进程介绍:file:///D:/Program%20Files/docs/guide/components/processes-and-threads.html

进程的优先级:

1、前台进程:activity的onResume

2、可视进程:activity的onPause

3、服务进程:startService后台在运行的服务(如下载文件服务,后台播放音乐)

4、后台进程:activity的onStop

5、空进程:保留只是为了在下一次能够快速启动

二、start方式开启服务

服务开启,依次执行onCreate和onStartCommand,再次开启,只执行onStartCommand

服务开启后会一直运行,直到手动停止

三、电话录音案例

TelephoneManager

1、定义服务,开启服务

2、在服务的onCreate中获得TelephonyManager

3、注册电话的监听

4、定义一个类用来监听电话的状态(onCallStateChanged)

5、录音功能(MediaRecorder)

录音功能官方原文:file:///D:/Program%20Files/docs/guide/topics/media/audio-capture.html

四、使用服务注册特殊的广播接收者

1、定义广播接收者(接收屏幕解锁和锁屏事件)

2、定义服务用于注册广播接收者(特殊广播接收者只能通过代码注册接收)

3、MainActivity中开启服务

4、配置服务

五、bindService开启服务特点

1、bind开启时,服务会依次执行onCreate和onBind

2、onBand返回null时,onServiceConnected不执行

3、再次bindService,服务没有响应

4、Activity销毁后,bindService的服务同时销毁

5、不可以多次解绑

6、通过bind开启的服务不能在设置页面找到(隐形服务)

六、引入bindService服务原因

为了调用服务里定义的方法

七、通过bindService方式调用服务方法里面的过程

1、服务内部定义一个方法

2、服务内部定义一个Binder类,类中定义一个方法调用服务内部的方法

3、实例化一个Binder通过onBind返回

4、onCreate方法中调用bindService开启服务

5、onServiceConnected中获取Binder对象

6、通过Binder对象调用服务内部的方法

7、注意Activity销毁方法中解绑服务

八、通过接口方式调用服务里面的方法

九、百度音乐盒框架

十、aidl介绍

本地服务:运行在自己应用里的服务

远程服务:运行在其他应用里的服务

IPC进程间通信

1、把IService.java变成aidl文件(改后缀名)

2、把文件中public去掉

3、系统自动生成文件,文件中生成一个Stub类

4、自定义一个类继承自Stub

5、保证两个应用的aidl一致(文件相同,包名相同)

6、用Stub类中的asInterface(service)获取IBinder对象

十一、aidl应用场景

支付宝

原文地址:https://www.cnblogs.com/leishoulin/p/7441790.html