美文网首页
记:BroadcastReceiver中知识点梳理

记:BroadcastReceiver中知识点梳理

作者: 爱吃板栗的小女孩 | 来源:发表于2019-01-04 14:08 被阅读10次
    知识点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中已经失效

    相关文章

      网友评论

          本文标题:记:BroadcastReceiver中知识点梳理

          本文链接:https://www.haomeiwen.com/subject/yfdhrqtx.html