记:BroadcastReceiver中知识点梳理

知识点1.广播的应用范围

(1)广播可用于接收系统广播
(2)广播可用于监听/接收APP发出的广播(同应用或不同应用)
(3)广播可用于多线程通信

知识点2.广播的简单流程

首先消息处理者将自己注册到AMS(Activity Manager Service 推荐阅读),再之后有消息发送者,发送一个广播到AMS,AMS从包名、action等属性中找到相匹配的注册的消息处理者,并把这个消息发给它,消息处理者接收到广播后再进行接下来处理

广播发送流程.jpg

知识点3.如何声明一个广播

自定义类继承BroadcastReceiver即可

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 接收到广播后,则自动调用该方法
        Toast.makeText(context,"收到",Toast.LENGTH_SHORT).show();
    }
}
知识点4.广播的分类

分为静态广播动态广播
静态广播
静态广播只需要把自定义的广播注册到Manifest中即可。
静态广播生命周期是整个APP,不随Activity销毁而消失。也有说即使APP被关掉仍可以接收到,此说法从3.1可能会不好用,并且各个手机现在都定制系统会管制。除非那些大厂被加入白名单中。
动态广播
动态广播注册是在activity中。注册一般在onResume(),销毁在onPause()这是因为onPause()一定会执行,而onStop()和onDestory()在activity非正常销毁可能不会执行。如果不销毁会由于广播仍存在,导致内存溢出。activity关闭,广播结束

知识点5.静态广播使用方法:

使用上述自定义的MyBroadcastReceiver注册到Manifest。发送广播的方式静动一致。

  <receiver android:name=".MyBroadcastReceiver">
      <intent-filter>
          <action android:name="danny" />
      </intent-filter>
  </receiver>

静态广播的属性全说明(参考自https://www.jianshu.com/p/ca3d87a4cdf3

<receiver 
    android:enabled=["true" | "false"]
//此broadcastReceiver能否接收其他App的发出的广播
//默认值是由receiver中有无intent-filter决定的:如果有intent-filter,默认值为true,否则为false
    android:exported=["true" | "false"]
    android:icon="drawable resource"
    android:label="string resource"
//继承BroadcastReceiver子类的类名
    android:name=".mBroadcastReceiver"
//具有相应权限的广播发送者发送的广播才能被此BroadcastReceiver所接收;
    android:permission="string"
//BroadcastReceiver运行所处的进程
//默认为app的进程,可以指定独立的进程
//注:Android四大基本组件都可以通过此属性指定自己的独立进程
    android:process="string" >

//用于指定此广播接收器将接收的广播类型
//本示例中给出的是用于接收网络状态改变时发出的广播
 <intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
知识点6.动态广播使用方法:
注册:
    @Override
    protected void onResume() {
        super.onResume();
        //动态广播注册在onResume
        receiver = new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter("danny");
        registerReceiver(receiver, intentFilter);
    }
销毁:
   @Override
    protected void onPause() {
        super.onPause();
        //动态广播销毁在onPause
        unregisterReceiver(receiver);
    }
知识点7.广播的分类(包含如何发送广播)

1.普通广播
特点
a.需要包含注册和发送
b.action可自定义,发送与注册时保持一致即可
c.接收异步,不一定哪个广播先收到消息
注册可采用静态或动态方法,下面列举如何发送,注册要和发送时传递的action能对上

  Intent intent = new Intent();
  intent.setAction("danny");
  sendBroadcast(intent);

2.系统广播
特点
a.只包含注册,不包含手动调用发送,会在系统定义的action发送改变时,自动调用并回调进onReceive()。若人为调用会保错
b.action是系统定义好的(需要时可查找https://www.jianshu.com/p/ca3d87a4cdf3
c.动态注册或静态注册都可以

3.有序广播
特点
a.发送广播按照优先级,若优先级相同,动态注册>静态注册
b.优先级高的接收到后可拦截,也可修改。之后广播收到都是拦截或修改后的

有序广播优先级设置-静态注册

<receiver android:name=".SystemReceiver" >
     <intent-filter android:priority="100">
         <action android:name="danny" />
     </intent-filter>
</receiver>

有序广播优先级设置-动态注册

@Override
protected void onResume() {
   super.onResume();
   //动态广播注册在onResume
   receiver = new My4BroadcastReceiver();
   IntentFilter intentFilter = new IntentFilter("lalala");
   intentFilter.setPriority(100);
   registerReceiver(receiver, intentFilter);
}

有序广播发送sendOrderedBroadcast()有2个重载函数

  Intent intent = new Intent();
  intent.setAction("danny");
  sendOrderedBroadcast(intent,null);

4.APP应用内广播
特点
a.只能在同一APP内接收发送
如何设置
a.将exported设为false,android:exported="false"
b.发送和接收增加permission
c.发送指定包名,intent.setPackage(packageName)

5.粘性广播
在Android5.0 & API 21中已经失效

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容