Android 本地广播

正常的广播是全局广播,所有的应用都可以接收到,如果我们用其发送一些数据,容易被其他应用获取,引起安全问题。其他应用也可以发送广播,被我们的应用接收,也可能导致安全问题。

所以引入了本地广播机制

 使用LocalBroadcastManager来管理广播:

  1. 调用LocalBroadcastManager.getInstance()来获得实例
  2. 调用xx.registerReceiver()来注册广播
  3. 调用xx.sendBroadcast()发送广播
  4. 调用xx.unregisterReceiver()取消注册

代码如下:

public class LocalReciverActivity extends AppCompatActivity {
    private final static String MY_ACTION = "CON.DU.TEST";
    private LocalBroadcastManager localBroadcastManager;
    private TestLocalReciver reciver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_local_reciver);
        reciver = new TestLocalReciver();
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        IntentFilter intentFilter = new IntentFilter(MY_ACTION);
        localBroadcastManager.registerReceiver(reciver , intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        localBroadcastManager.unregisterReceiver(reciver);
    }

    public void send(View view) {
        Intent intent = new Intent(MY_ACTION);
        localBroadcastManager.sendBroadcast(intent);
    }

    class TestLocalReciver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context , "接收到广播" , Toast.LENGTH_SHORT).show();
        }
    }

}

 

Android本地广播是一种高效且安全的通信方式,在Android开发中扮演着重要角色,它提高了应用内部组件间的通信效率,还增强了系统的安全性和应用的性能[^1]。 ### 使用方法 虽然给定引用未详细提及使用方法,但一般而言,使用本地广播通常有以下步骤: 1. 创建广播接收器:继承 `BroadcastReceiver` 类并实现 `onReceive` 方法。 ```java import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyLocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 处理接收到的广播 } } ``` 2. 注册广播接收器:使用 `LocalBroadcastManager` 进行动态注册。 ```java import android.content.IntentFilter; import android.support.v4.content.LocalBroadcastManager; // 在合适的地方注册 LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context); MyLocalReceiver receiver = new MyLocalReceiver(); IntentFilter intentFilter = new IntentFilter("com.example.MY_LOCAL_ACTION"); localBroadcastManager.registerReceiver(receiver, intentFilter); ``` 3. 发送广播:同样使用 `LocalBroadcastManager` 发送。 ```java import android.content.Intent; import android.support.v4.content.LocalBroadcastManager; // 发送广播 Intent localIntent = new Intent("com.example.MY_LOCAL_ACTION"); LocalBroadcastManager.getInstance(context).sendBroadcast(localIntent); ``` 4. 注销广播接收器:在不需要时注销以避免内存泄漏。 ```java LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver); ``` ### 原理 Android本地广播基于 `LocalBroadcastManager` 实现。`LocalBroadcastManager` 内部维护了一个广播接收器的列表,当发送本地广播时,它会遍历这个列表,将广播分发给匹配的接收器。与全局广播不同,本地广播只在应用内部传播,不会离开应用,因此具有更高的安全性和性能,因为它不需要进行跨进程通信,减少了系统开销[^1][^4]。 ### 应用场景 本地广播主要用于应用内部组件之间的通信,如Activity、Service、Fragment等之间的数据传递和状态同步。例如,当Service完成某项任务后,通过本地广播通知Activity更新UI;或者Fragment需要与其他组件共享数据时,也可以使用本地广播进行通信。由于其安全性高,不会泄漏应用内部信息,适合在需要保护数据隐私的场景中使用[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值