BroadcastReceiver简介

[size=large][color=blue]BroadcastReceiver[/color]作为四大组件之一,觉得跟Activity最大的区别是不怎么跟用户交互,跟Service最大区别是可以广播,将信息发送给诸多用户。
BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。
在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。
Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。
BroadcastReceiver的缺点:效率非常低,如果传递小信息还可以,如果是大规模信息的话就不能胜任了,否则会导致应用非常非常卡。

下面贴个小例子的代码:[/size]

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBR extends BroadcastReceiver{

public static final String Action = "com.example.l303boardcast.intent.action.MyBR";

@Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("BroadcastReceiver:value="+arg1.getStringExtra("txt"));
}

}

[size=large][color=green]静态注册[/color]
静态注册是在AndroidManifest.xml文件中配置的,置了以上信息之后,只要是android.intent.action.MY_BROADCAST这个地址的广播,MyReceiver都能够接收的到。注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。[/size]
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.l303boardcast.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="MyBR"></receiver>
</application>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<Button
android:id="@+id/but1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发广播" />

<Button
android:id="@+id/but2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="绑定广播" />

<Button
android:id="@+id/but3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="解除广播 " />

</LinearLayout>
[size=large][color=green]动态注册[/color]
动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播,下面我们就来看一下注册的代码:(绑定广播触发动态注册的事件)[/size]

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity implements OnClickListener{

private MyBR mybr = new MyBR();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.but1).setOnClickListener(this);
findViewById(R.id.but2).setOnClickListener(this);
findViewById(R.id.but3).setOnClickListener(this);
}

@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.but1:
Intent intent = new Intent(MyBR.Action);
intent.putExtra("txt", "吊炸天");
sendBroadcast(intent);
break;
case R.id.but2:
registerReceiver(mybr, new IntentFilter(MyBR.Action));
break;
case R.id.but3:
unregisterReceiver(mybr);
break;
default:
break;
}
}

}


[size=large]上面是个小例子,补充一下普通广播跟有序广播的区别:
上面的例子就是[color=green]普通广播[/color]:普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
[color=green]有序广播:[/color]
有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。
现在这三个接收者的<intent-filter>多了一个android:priority属性,并且依次减小。这个属性的范围在-1000到1000,数值越大,优先级越高。[/size]

<intent-filter 
android:priority="998">
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值