网友通过本文主要向大家介绍了broadcastreceiver,android四大组件,android四大组件详解,android四大组件简介,android四大组件作用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Android四大组件之BroadcastReceiver
BroadcastReceiver 简介
BroadcastReceiver 广播是一种订阅–通知 事件,广播接收者向Android系统 register (订阅广播),广播发送者向Adnroid系统 sendBroadCast(发送广播),然后Android 系统通知所有注册该广播的接收者,广播接收者收到自己注册的广播之后实现自己想做的事情(该事情一般不超过10s,否则应用会出现ANR)。
BroadCast的分类:
无序广播:也就是普通广播,只要注册了该action的广播接收者都能收到该广播,且没有先后顺序。
有序广播:广播接收者按照优先级高低依次接受该广播,并且优先接收的广播可以通过setResultExtras(Bundle)方法,将处理好的结果传送到下一个广播接收者那里。
粘性广播:发送广播调用的方法 sendStickyBroadcast(Intent),和sendBroadcast(Intent)不同。
粘性广播会一直保留在内存当中,直到有广播接收者注册该广播,该广播才算结束。不好解释,等会具体看例子。
BroadCase的使用:
一.普通广播:
根据注册方式不同可以分为 静态注册广播和动态注册广播。
1.静态注册广播使用实例
AndroidManifest.xml 如下:
2.广播接收者实现如下:
package com.xjp.mybroadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Description:静态广播接收器
* User: xjp
* Date: 2015/5/14
* Time: 14:56
*/
public class BroadCastReceive1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO 接收到广播之后处理自己的事情
String action = intent.getAction();
String result = intent.getStringExtra("key");
MyLog.d("the BroadCast action is " + action + " the BroadCast receive result is " + result);
}
}
3.广播发送者实现如下:
package com.xjp.mybroadcast;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
private Button btnSend;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSend = (Button) findViewById(R.id.button);
btnSend.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
sendBraodCast();
break;
}
}
private void sendBraodCast() {
/**
* 申明静态广播的 action 行为
*/
String action = "com.xjp.mybroadcast.BroadCastReceive1";
Intent intent = new Intent(action);
intent.putExtra("key", "静态广播测试");
sendBroadcast(intent);
}
}
打印结果如下:
4.静态注册广播特点:
注册广播在 AndroidManifest.xml中。 广播接收者需重新 继承 BroadcastReceiver 类来实现 onReceive()抽象方法。 应用退出无需 注销广播,因此导致:即使广播退出之后,如果有其他应用发送该action行为的广播,此应用还是能接收到该广播的,也就是还会打印上面的 结果。二.动态广播:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
private Button btnSend;
private BroadCastReceive2 myReceive;
private IntentFilter filter;
private final static String ACTION = "com.xjp.mybroadcast.BroadCastReceive2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSend = (Button) findViewById(R.id.button);
btnSend.setOnClickListener(this);
myReceive = new BroadCastReceive2();
filter = new IntentFilter();
filter.addAction(ACTION);
}
@Override
protected void onResume() {
/**
* 注册广播
*/
LocalBroadcastManager.getInstance(this).registerReceiver(myReceive, filter);//官方建议使用
// this.registerReceiver(myReceive, filter);
super.onResume();
}
@Override
protected void onPause() {
/**
* 注销广播
*/
LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceive);//官方建议使用
// this.unregisterReceiver(myReceive);
super.onPause();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
sendBraodCast();
break;
}
}
private void sendBraodCast() {
/**
* 申明广播的 action 行为
*/
Intent intent = new Intent(ACTION);
intent.putExtra("key", "动态广播测试");
/**
* 官方提倡使用如下发送广播,原因是更快,更安全,不会导致内存泄漏
*/
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
// this.sendBroadcast(intent);
}
/**
* 内部类实现广播接收器
*/
private class BroadCastReceive2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO 接收到广播之后处理自己的事情
String action = intent.getAction();
String result = intent.getStringExtra("key");
MyLog.d("the BroadCast action is " + action + " the BroadCast receive result is " + result);
}
}
}
动态广播特点
在代码中调用registerReceiver()方法 注册广播。 广播接收者需重新 继承 BroadcastReceiver 类实现内部类。 动态广播在应用退出时需要 调用unregisterReceiver()方法来注销广播。如果应用退出时没有注销广播,会报如下错误:
因此,我们通常的做法是:在 onResume()中注册广播,在onPause中注销广播。 当广播注销之后就接收不到任何系统发送的广播了。
三.有序广播:
示例:
package com.xjp.mybroadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.Button; public class MainActivity extends ActionBarActivity implements View.OnClickListener { private Button btnSend; private BroadCastRecei
您可能想查找下面的文章:
- Android深入四大组件(四)广播的注册、发送和接收过程
- 4.3.1 BroadcastReceiver牛刀小试
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解,broadcastreceiver
- Android-BroadcastReceiver详解
- BroadcastReceiver--Android广播机制,broadcastreceiver
- 解析BroadcastReceiver之你需要了解的一些东东,broadcastreceiver
- Android--BroadcastReceiver应用详解
- Android四大组件之BroadcastReceiver
- Android:广播接收器(BroadCastReceiver)要点随笔。,
- Android中BroadcastReceiver组件详解