zoukankan      html  css  js  c++  java
  • Android LocalBroadcastManager 与 BroadcastReceiver

    Android中BroadcastReceiver主要用途有

    发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等)

    Android中发送广播的方式:

    普通广播:无论优先级大小,将发送给所有监听Action="com.test.sample.action"的广播,内容不可被修改,无传递性。

    1 Intent intent = new Intent( "com.test.sample.action");
    2 sendBroadcast(intent);

    异步(黏性)广播: 当处理完之后的Intent ,依然存在,这时候registerReceiver(BroadcastReceiver, IntentFilter) 还能收到他的值,直到你把它去掉 , 无传递性 , 无法终止(abort())广播。

    发这个广播需要权限<uses-permission android:name="android.permission.BROADCAST_STICKY" />

    去掉是用这个方法removeStickyBroadcast(intent); 但别忘了在执行这个方法的应用里面 AndroidManifest.xml 同样要加上面的权限;

    1 sendStickyOrderedBroadcast(intent, resultReceiver, scheduler,
    2        initialCode, initialData, initialExtras)

    有序广播:按照接收者的优先级顺序接收广播 , 优先级别在 intent-filter 中的 priority 中声明 ,-1000 到1000 之间 ,值越大 优先级越高 。可以终止广播意图的继续传播 , 接收者可以篡改内容,具有传递性。

    1 sendBroadcast(intent);

    注意:安全性都不太好,因此只适用于安全性较低的数据传递,或者页面更新。

    所以android在android-support-v4.jar中引入了LocalBroadcastManager,称为局部通知管理器,这种通知的好处是安全性高,效率也高,适合局部通信,可以用来代替Handler更新UI

    对于普通:registerReceiver(); registerReceiver();

    // Activity:

    // 声明 LocalBroadcastManager
    LocalBroadcastManager  mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
    // 声明 BroadcastReceiver 
    BroadcastReceiver mReceiver new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
        // Todo
      }
    };
    // 注册
    mLocalBroadcastManager.registerReceiver(mReceiver, filter);

    // Service:

    1 // 声明 LocalBroadcastManager 
    2 LocalBroadcastManager mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
    3 //  sendBroadcast 
    4 mLocalBroadcastManager.sendBroadcast(new Intent(ACTION_FLAG));
  • 相关阅读:
    Doubles
    The 3n + 1 problem
    Counterfeit Dollar
    Maya Calendar
    08_python的列表、元祖、字符串、字典及公共方法
    07_python的函数
    06_python的while语句
    05_python的if语句
    04_python基本的输入输出函数
    03_python的数据类型和变量的定义及使用
  • 原文地址:https://www.cnblogs.com/CharlesGrant/p/4844600.html
Copyright © 2011-2022 走看看