zoukankan      html  css  js  c++  java
  • BroadcastReceiver浅析

    1.什么是BroadcastReceiver?

    本质上是属于一个监听器,但onXxxListenter只是程序级别的监听器,当程序退出时候监听器也随之关闭。而BroadcastReceiver是系统级别的监听器,只要存之匹配的intent被广播出来,BroadcastRecevier就会被激发。

    2.如何使用BroadcastRecevier

    原理:子类继承BroadcastReceiver,并为该子类添加intent描述,当程序发送intent的时候,intent会进行匹配搜索,当与该子类的intent描述相一致的时候,就会调用子类的onRecevie()方法

    步骤一:子类继承BroadcastReceiver并重写onReceive()

    public class FirstBroadcast extends BroadcastReceiver {
        private static final String TAG = "FirstBroadcast";
        @Override
        public void onReceive(Context context, Intent intent) {
            //当Broadcast被intent启动的时候调用该方法
            Log.d(TAG,"The Broadcast start");
        }
    }

    步骤二:添加intent描述(有两种方式)

             <!--方法一:在AndroidManifest.xml中注册-->
    <receiver android:name=".FirstBroadcast">
        <intent-filter>
           <!--name可以系统给的也可以是自定义的-->
            <action android:name="com.chen.firstBroadcast"/>
        </intent-filter>
    </receiver>
    //方法二:在Activity代码中编写
    public class MainActivity extends AppCompatActivity {
        private FirstBroadcast mFirstBroadcast;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mFirstBroadcast = new FirstBroadcast();//创建Broadcast
            IntentFilter intentFilter = new IntentFilter();//创建intent描述
            intentFilter.addAction("com.chen.FirstBroadcast");//将描述装入
            registerReceiver(mFirstBroadcast,intentFilter);//注册到Broadcast
        }
    }

    步骤三:利用Intent发送给Broadcast

    //在MainActivity中
    Intent intent1 = new Intent("com.chen.FirstBroadcast");、、刚在注册的描述
    sendBroadcast(intent1);

    3.有序广播和普通广播

    普通广播(Normal Broadcast):可在同一时刻被所有接收者接收到,所以说缺点是:无法将数据结果传递给下一个。

                                             sendBroadcast()发送无序广播

    有序广播(Ordered Broadcast):有序广播的接收者按照之前定义的优先级依次接收Broadcast,如:A>B>C,则A先收到,然后B,最后C。

    设置优先级①在AndroidManifest的<Intent-filter android:priority=数值> ②在代码的IntentFilter对象的 setPriority()取值范围是1~1000

    sendOrderedBroadcast()发送有序广播。

    同时,优先收到广播的接收者可以停止继续发送Broadcast:调用abortBroadcast();

    优先收到广播的接收者可以通过setResultExtras(Bundle)将数据存入Broadcast,然后传送给下一个接收者,下一个接收者通过Bundle bundle = getResultExtras(true);

    接收数据    

    4.注解

    1.若BroadRecevier的onRecevie()不能再10秒内完成的话,Android会认为该程序无响应。

    2.系统收到短信发出的Broadcast属于Ordered Broadcast。

    5.作用

    1.Service与Activity之间交互的桥梁

    2.接收系统发出的Broadcast(系统发出的常用广播:http://blog.sina.com.cn/s/blog_7dbac1250101mt5h.html

  • 相关阅读:
    CSS: 三栏布局
    CSS: 实现两栏布局,左边固定,右边自适应的4种方法
    css清除浮动
    浏览器解析时间线
    @Valid解决无法校验List问题
    Docker+Jenkins+Git+Maven实现Springboot项目自动化部署
    Git安装(CentOS)
    Jenkins安装
    Docker安装(Centos)
    Maven安装(Linux)
  • 原文地址:https://www.cnblogs.com/rookiechen/p/5278947.html
Copyright © 2011-2022 走看看