一、service使用
1. Service的启动方式
A. start方式:
(1)start方式启动的Service的生命周期如下:
- onCreate()--->onStartCommand()(onStart()方法已过时) ---> onDestory()
(2) 使用Service的步骤:
1.定义一个类继承Service
2.在Manifest.xml文件中配置该Service
3.使用Context的startService(Intent)方法启动该Service
4.不再使用时,调用stopService(Intent)方法停止该服务
(3)说明:如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和onStartCommand()。服务停止的时候调用 onDestory()。服务只会被停止一次。
(4)特点:一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者不能调用服务里面的方法。
B. bind方式
(1)bind方式启动的Service的生命周期如下:
- onCreate() --->onBind()--->onunbind()--->onDestory()
(2)使用Service的步骤:
1.定义一个类继承Service
2.在Manifest.xml文件中配置该Service
3.使用Context的bindService(Intent,
ServiceConnection, int)方法启动该Service
4.不再使用时,调用unbindService(ServiceConnection)方法停止该服务
(3)注意:绑定服务不会调用onstart()或者onstartcommand()方法
(4)特点:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
绑定者可以调用服务里面的方法。
参考链接:http://www.jianshu.com/p/2fb6eb14fdec
二、aidl使用
对于绑定服务传递数据,Service只局限于本地服务,无法使用服务进行跨进程间的交互。如果需要用到跨进程交互的话,需要用到一个新的技术-AIDL
1、 aidl介绍
AIDL是 Android Interface definition language的缩写,它是一种进程通信接口的描述,通过sdk解释器对器进行编译,会把它编译成java代码在gen目录下,类路径与aidl文件的类路径相同。
2、 aidl跨进程传递基本数据类型
AIDL默认情况下只能传递基本类型、String、List、Map、CharSequence。
参考链接:
1.http://www.cnblogs.com/plokmju/archive/2013/11/11/android_Service_aidl_NormalType.html
三、AudioManager
(1)AudioManager获取媒体焦点相关步骤:
- 获取AudioManager对象
- 注册OnAudioFocusChangeListener监听
- 就是在我们播放音乐的时候为AudioManager添加获取焦点的监听
- 在我们不用的时候将焦点释放掉一般我们是在ondestroy()方法中释放
(2)AudioManager的几个常量:
AUDIOFOCUS_REQUEST_GRANTED 永久获取媒体焦点(播放音乐)
AUDIOFOCUS_GAIN_TRANSIENT 暂时获取焦点 适用于短暂的音频
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK Duck我们应用跟其他应用共用焦点 我们播放的时候其他音频会降低音量
(3)声音类型,可取为STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)
(4)AudioManager 主要方法介绍
由于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法:
方法:adjustVolume(int direction, int flags)
解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。
方法:getMode()
解释:返回当前音频模式。
方法:getRingerMode()
解释:返回当前的铃声模式。
方法:getStreamVolume(int streamType)
解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。
方法:setRingerMode(int ringerMode)
解释:改变铃声模式
四、contentPrivider内容提供者
内容提供者是Android系统中专门为应用程序之间的数据通讯开发的,正常来说应用程序之间是不允许数据通信的,但是内容提供者的作用就是让别的应用程序访问我们的数据库。想要学习内容提供者需要两个应用程序,一个作为内容提供者,一个作为内容访问者。
1.创建一个数据库帮助类,用于数据的存储和访问,
2.自定义一个内容提供者---创建一个类继承自contentProvider
3.在清单文件中进行注册,表明本APP开启了一个内容提供者
甲方:1.创建数据库 2.创建一个内容提供者,并实现对应的增删改查方法
乙方:1.创建一个内容接收者 2.通过内容接收者,调用指定的APP的增删改查方法
参考链接:http://xiechengfa.iteye.com/blog/1415829
五、BroadcastReceiver
Android广播分为两个方面:广播发送者和广播接收者
(1)广播作为Android组件间的通信方式,可以使用的场景如下:
1.同一app内部的同一组件内的消息通信(单个或多个线程之间);
2.同一app内部的不同组件之间的消息通信(单个进程);
3.同一app具有多个进程的不同组件之间的消息通信;
4.不同app之间的组件之间消息通信;
5.Android系统在特定情况下与App之间的消息通信。
(2) BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册。
1).静态注册:
直接在AndroidManifest.xml文件中进行注册。规则如下:
<receiver android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</receiver>
2).动态注册:
动态注册时,无须在AndroidManifest中注册<receiver/>组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver。registerReceiver的定义形式如下:
1 registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
2 registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)
参考链接:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html
六、Anr原因和解决
参考链接:http://blog.csdn.net/lonlylove/article/details/42006285
七、音频编解码流程介绍
八、Framework层相关