广播接收者
电量不足,sd卡被移除,电话外拨,短信到了等等各种各样的事件...
- 获得收音机 class 类 extends Broadcastreceiver
- 装上电池 <receiver android:name="完全包名">
- 调到对应的频道 <intent-filter><action android:name="系统的动作"> <data android:scheme="file"> </intent-filter>
在广播接收者里面开启activity需要记得加一个flag FLAGACTIVITYNEW_TASK告知activity运行在自己的任务栈里面,因为广播接收者里面不存在上下文 4.0之后的版本需要加一个开机启动的权限
android.provider.Telephony.SMS_RECEIVED
广播接收者的特点:
即使应用程序的进程不存在,当广播事件到来的时候,广播接收者的进程会自动启动,响应广播事件
在低于4.0版本里面只有关机和卸载才能避免广播事件到来时应用程序的自动启动,高版本可以通过强行停止
广播事件的类型
- 有序广播
广播消息是按照一定的顺序传达的,高优先级的先得到广播消息,低优先级的后得到,高优先级的可以拦截广播消息或者修改广播消息.效率比较低 * 无序广播 广播消息没有顺序,同时接收广播消息,效率高,但不能修改广播消息
有序广播参数 1. intent 意图 2. receiverPermission 权限 默认null 3. resultReceiver 结果接受者null 4. 消息处理器 null 默认 5. 几号广播 6. 要发送的内容 7. Bundle 额外的数据 null
有序广播可以在intent-filter里面设置priority优先级 1000为最高优先级 -1000为最低优先级 结果接收者不需要在清单文件里面进行配置
特殊的广播事件
在abdroid里面有一些产生非常频繁的广播事件,在清单文件里面配置是不会生效的 包括电量变化 屏幕锁屏/解锁 这些广播事件只能利用代码注册
组件
- Activity
- broadcast Receiver
- Service : 服务
windows: 长期后台运行没有界面的进程就叫服务
android: 长期后台运行,没有界面的组件.服务是运行在当前应用程序进程里面
服务的父类和activity的父类的父类是同一个ContextWrapper 服务就是一个特殊的没有用户界面的,可以长期执行的activity
服务的应用场景
长期后台运行,没有界面的组件
监视一个硬件是否被插入
连接服务器刷新最新的数据
定时的轮询
注意: 服务是运行在主线程里面(main),不可以直接在服务里面编写耗时的逻辑.
进程的优先级
- Forground process
前台进程: 用户正在操作的应用程序所在的进程就是前台进程
- Visible process
可视进程: 用户不能进行操作,但界面用户仍然可以看到
- Service process
服务进程: 应用程序有一个服务代码正在运行
- Background process
后台进程: 应用程序有界面,但界面被用户最小化(home)
- Empty process
空进程: 应用程序没有任何运行的Activity,service
前台进程>可视进程>服务进程>后台进程>空进程
服务的生命周期 onCreate onStart(废弃,因为服务没有界面) onStartCommand onDestroy * start的方式开启服务,服务只会被创建一次,在创建的时候执行oncreate方法,一旦服务创建完毕,再去开启service就不会重复执行oncreate方法了,只会执行onstart和onstartcommand * 服务停止也只会调用一次