您的位置:首页 > 移动开发 > Android开发

关于广播接收者与服务

2016-10-13 23:15 197 查看

广播接收者

电量不足,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 * 服务停止也只会调用一次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android