码迷,mamicode.com
首页 > 其他好文 > 详细

BroadcastReceiver

时间:2016-05-13 00:36:51      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

1.Broadcast(广播)

是一种广泛运用的在应用程序之间传输信息的机制

2.BroadcastReceiver(广播接收者)

是对发送出来的广播进行过滤接收并响应的一类组件,他就是用来接收来自系统和应用中的广播

3.用途:

. 当开机完成后系统会产生一条广播

. 当网络状态改变时系统会产生一条广播 

. 当电池电量改变时,系统会产生一条广播



发送:

. 把信息装入一个Intent对象(如Action、Category)

. 通过调用相应的方法将Intent对象以广播方式发送出去

. sendBroadcast()

. sendOrderBroadcast()

. sendStickyBroadcast()


接收:

当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。

所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。



BroadcastReceiver生命周期只有十秒左右


在BroadcastReceiver里不能做一些比较耗时的操作


应该通过发送Intent给Service,由Service来完成


不能使用子线程



动态注册:onCreate()方法中注册

        IntentFilter intentFilter = new IntentFilter("BC_One");
        BC2 bc2 = new BC2();
        registerReceiver(bc2, intentFilter);



静态注册:在配置文件中注册

        <receiver
            android:name="com.example.broadcastreceiverdemo.BC1"
            >
            
            <intent-filter
                >
                <action android:name="BC_One" />
            </intent-filter>
            
        </receiver>



普通广播特点:

同级别接收先后是随机的(无序)

级别低的后收到广播(intent-filter中android:priority="")

接收器不能截断广播的继续传播也不能处理广播(abortBroadcast())

同级别动态注册高于静态注册


有序广播特点:

同级别的接收顺序是随机的

能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定是否截断该广播

接收器能截断广播的继续传播,也能处理广播

同级别动态注册高于静态注册



Bundle传递数据:

Bundle bundle = new Bundle();
bundle.putString("test", "data");
setResultExtras(bundle);


Bundle bundle = getResultExtras(true);
String s2 = bundle.getString("test");



动态注册要记得销毁

在onDestroy方法中

unregisterReceiver()



    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>



    public void doClick(View v) {
    	switch (v.getId()) {
		case R.id.send1: // 发送一条普通广播
			Intent intent = new Intent();
			intent.putExtra("msg", "common broadcast");
			intent.setAction("BC_One");
			sendBroadcast(intent);
			break;
			
		case R.id.send2: // ordered broadcast
			Intent intent2 = new Intent();
			intent2.putExtra("msg", "ordered broadcast");
			intent2.setAction("BC_One");
			sendOrderedBroadcast(intent2, null);
			
		// 先发送后注册 异步广播 滞留性	
		case R.id.send3: // asyn
			Intent intent3 = new Intent();
			intent3.putExtra("msg", "this is");
			intent3.setAction("BC_Three");
			sendStickyBroadcast(intent3);
			IntentFilter intentFilter = new IntentFilter("BC_Three");
			BC3 bc3 = new BC3();
			registerReceiver(bc3, intentFilter);
		
		default:
			break;
		}
    }
    
    @Override
    protected void onDestroy() {
    	super.onDestroy();
//    	unregisterReceiver(receiver);
    }



BroadcastReceiver

标签:

原文地址:http://blog.csdn.net/duanliuchang/article/details/51347759

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!