本文共 2224 字,大约阅读时间需要 7 分钟。
1、四大组件之一:广播(通知消息)接收器 –要想到在Manifest中注册
2、系统使用了很多广播:通知时间改变(闹钟才会响)、电池电量变低、拍摄了照片、改变了语言; 3、没有用户界面。只负责向所有在Manifest里的注册者发送广播,需要这个广播的人去接收它。
两种注册方式
BroadcastReceiver的两种注册方式
1、静态注册2、动态注册
在onStart方法中注册,在onStop方法中反注册@Override protected void onStart() { super.onStart(); /* 动态注册广播*/ //根据action里的android:name过滤广播。 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(COM_EXAMPLE_TEST_BROADCAST); registerReceiver(mTestBroadcastReceiver, intentFilter); } @Override protected void onStop() { super.onStop(); unregisterReceiver(mTestBroadcastReceiver); }
3、两者的区别:静态注册的广播一直有效,动态注册的广播需要反注册掉,不然注册在内存里,会不断的消耗内存,所以常用动态注册。
MainActivity类
@Override public void onClick(View view) { /* 发送广播 */ Intent intent = new Intent(MainActivity.this,TestBroadcastReceiver.class); //只发给action为COM_EXAMPLE_TEST_BROADCAST intent.setAction(COM_EXAMPLE_TEST_BROADCAST); intent.putExtra("toast", "this is a toast of broadcast"); sendBroadcast(intent); }
TestBroadcastReceiver类
public class TestBroadcastReceiver extends BroadcastReceiver { /* 接收广播、处理数据 */ @Override public void onReceive(Context context, Intent intent) { if (intent != null){ //判断字符串是否相等TextUtils.equals(). if (TextUtils.equals(intent.getAction(),MainActivity.COM_EXAMPLE_TEST_BROADCAST)){ String toastString = intent.getStringExtra("toast"); Toast.makeText(context,toastString,Toast.LENGTH_SHORT).show(); } } }}
如果在onReceive方法中执行耗时操作会怎样?如何解决?
同Activity、Service一样,new Thread进程。1、Normal broadcasts
2、Ordered broadcasts 3、二者有什么区别? 正常广播,没有顺序,一下子向所有注册者发送广播;有序广播,广播有自己的顺序,根据顺序发送广播。有点像Service和IntentService。 4、Local broadcasts:LocalBroadcastManager 广播不是在系统中而是在某应用中,这样速度会很快;android系统发广播时所有的应用都能收到,消耗手机性能、广播延时。Register – SendBroadcast – onReceive – unRegister。
总结:
1、是什么? 2、怎么用? 3、两种注册方式? 4、几种类型? 5、生命周期注意事项: 1、适当的用、不要滥用 (消耗性能、广播延时、广播被丢弃等。)
2、可以用LocalBroadcast该用callback时用callback,要么用LocalBroadcast。
转载地址:http://ghani.baihongyu.com/