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应用场景
支付宝