Android高级应用开发(基础篇) - stage9 - 学习笔记

 

Broadcast Receiver

 

比对Content Provider,肯定也是成对出现和使用的

 

 

在系统内,通知和判定执行状态

1、系统执行状态:比如开机,关机,TF卡插拔,电量过低,如同微软的MSMQ

2、自定义执行状态:发消息提示更新界面

 

 

一般消息及消息队列的机制

 

 

以上这些都是系统级的,不需要用户自己去管理维护

 

用户需要做的工作:

1、定义消息体

2、得到消息体后的处理

 

这两部分就是BroadcastReceiver的工作内容

 

 

 

有哪两类的消息可以接收:

1、Normal broadcasts 标准广播:通过Context.sendBroadcast(intent)发送

广播发送后用户都能接收到广播,不区分前后顺序

2、Ordered broadcasts 排序广播:通过Context.sendOrderedBroadcast发送

给广播接受者设定接收的顺序(多个BroadcastReceiver),可以在前期接收到的广播中决定是否接收后面的广播

在intent-filter中设定android:priority设定优先级,数值大的优先

如果想后面的BroadcastReceiver不再接收到广播,可以在自己的onReceive方法中使用abortBroadcast();方法

 

还有一种stickyBroadcast,粘性的,一般的Broadcast由Looper取出后就分发了,分发后就被释放掉

但是sticky broadcast不会被释放,以后还能够调用使用

 

发送-接收模式/发布-订阅模式

 

 

如何使用:

1、继承BroadcastReceiver

2、重载onReceive()方法

3、配置Androidmanifext.xml中的<receiver>及<uses-permission>

 

发布消息

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setAction("com.example.mybroadcast");
                intent.putExtra("message", "消息");
                sendBroadcast(intent);
            }
        });


 

 

建立一个BroadcastReceiver,首先注册它

<receiver android:name=".MyBroadcastReceiver" >
            <intent-filter android:priority="1">
                <action android:name="com.example.mybroadcast" />
            </intent-filter>
        </receiver>


 

这里的action可以换为android定义的action,可以监听系统事件的消息

 

 

继承BroadcastReceiver,复写onReceive方法

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("message", "message received");
    }

}


 

可以监听系统事件,例如收到短信

 

也可以接收自定义的事件

 

 

 

有一点要注意:

sendBroadcast方法是异步的,将消息放到消息队列主线程就不再关心了

但是BroadcastReceiver中的onReceive方法是在主线程的,可以直接操作界面,但是如果执行的任务过多就会ANR

所以耗时的操作还是要放到子线程中去处理

 

 

 

BroadcastReceiver接收到宿主进程生命周期

安装时BroadcastReceiver就会放到一个HashMap中,分发消息时会去找对应action的BroadcastReceiver

接收到消息就会启动宿主程序(通过BroadcastReceiver启动应用,但是activity是不启动的)

当返回后,如果没有其它交互,宿主进程状态为empty

因为如果要长期运行宿主进程,就startService

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值