深入分析 Android BroadcastReceiver (三)
创始人
2025-01-15 19:37:03
0

文章目录

    • 深入分析 Android BroadcastReceiver (三)
    • 1. 广播消息的优缺点及使用场景
      • 1.1 优点
      • 1.2 缺点
    • 2. 广播的使用场景及代码示例
      • 2.1. 系统广播
        • 示例:监听网络状态变化
      • 2.2. 自定义广播
        • 示例:发送自定义广播
      • 2.3. 有序广播
        • 示例:有序广播
      • 2.4. 本地广播
        • 示例:发送本地广播
    • 3. 优化策略
    • 4. 总结

深入分析 Android BroadcastReceiver (三)

1. 广播消息的优缺点及使用场景

1.1 优点

  1. 松耦合:广播机制允许应用组件之间以松散耦合的方式进行通信,而不需要彼此了解具体实现。
  2. 灵活性:广播可以在应用的各个部分之间传递消息,甚至跨进程传递。
  3. 系统广播:系统广播可以通知应用系统事件(如网络变化、电量低等),使得应用能及时响应系统状态变化。

1.2 缺点

  1. 性能问题:在主线程中处理广播消息,如果操作耗时,会导致应用卡顿。
  2. 安全性:公开广播可能被其他应用接收和发送,可能带来安全隐患,需要合理使用权限管理。
  3. 电量消耗:频繁的广播通信会增加设备的电量消耗,尤其是在后台频繁接收广播时。

2. 广播的使用场景及代码示例

2.1. 系统广播

系统广播是 Android 系统在特定事件发生时发出的广播,比如设备启动完成、网络状态变化等。

示例:监听网络状态变化

AndroidManifest.xml 中声明接收器:

                     

接收器实现:

public class NetworkChangeReceiver extends BroadcastReceiver {     @Override     public void onReceive(Context context, Intent intent) {         ConnectivityManager connectivityManager =              (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);         NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();          if (networkInfo != null && networkInfo.isConnected()) {             Toast.makeText(context, "Network Connected", Toast.LENGTH_SHORT).show();         } else {             Toast.makeText(context, "Network Disconnected", Toast.LENGTH_SHORT).show();         }     } } 

2.2. 自定义广播

应用内自定义广播,用于应用内部组件之间的通信。

示例:发送自定义广播

发送自定义广播:

Intent intent = new Intent("com.example.CUSTOM_ACTION"); intent.putExtra("data", "Broadcast Data"); sendBroadcast(intent); 

AndroidManifest.xml 中声明接收器:

                     

接收器实现:

public class CustomReceiver extends BroadcastReceiver {     @Override     public void onReceive(Context context, Intent intent) {         String data = intent.getStringExtra("data");         Toast.makeText(context, "Received: " + data, Toast.LENGTH_SHORT).show();     } } 

2.3. 有序广播

有序广播允许多个接收器按优先级顺序接收,并且可以中止广播的传播。

示例:有序广播

发送有序广播:

Intent intent = new Intent("com.example.ORDERED_ACTION"); sendOrderedBroadcast(intent, null); 

AndroidManifest.xml 中声明接收器,并设置优先级:

                                           

接收器实现:

public class FirstReceiver extends BroadcastReceiver {     @Override     public void onReceive(Context context, Intent intent) {         Toast.makeText(context, "First Receiver", Toast.LENGTH_SHORT).show();         // 继续传播广播     } }  public class SecondReceiver extends BroadcastReceiver {     @Override     public void onReceive(Context context, Intent intent) {         Toast.makeText(context, "Second Receiver", Toast.LENGTH_SHORT).show();         // 可以中止广播传播         abortBroadcast();     } } 

2.4. 本地广播

本地广播用于应用内部组件通信,避免跨进程通信带来的安全和性能问题。

示例:发送本地广播

发送本地广播:

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); Intent localIntent = new Intent("com.example.LOCAL_ACTION"); localIntent.putExtra("data", "Local Broadcast Data"); localBroadcastManager.sendBroadcast(localIntent); 

动态注册本地广播接收器:

@Override protected void onStart() {     super.onStart();     IntentFilter filter = new IntentFilter("com.example.LOCAL_ACTION");     LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, filter); }  @Override protected void onStop() {     super.onStop();     LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver); }  private BroadcastReceiver localReceiver = new BroadcastReceiver() {     @Override     public void onReceive(Context context, Intent intent) {         String data = intent.getStringExtra("data");         Toast.makeText(context, "Received: " + data, Toast.LENGTH_SHORT).show();     } }; 

3. 优化策略

  1. 避免耗时操作:在 onReceive 中避免执行耗时操作,使用 IntentService 或者其他异步机制。
  2. 动态注册和取消注册:在合适的生命周期方法中注册和取消注册接收器,避免内存泄漏。
  3. 合理使用本地广播:尽量使用 LocalBroadcastManager 进行应用内广播,避免不必要的跨进程通信。
  4. 权限管理:通过权限声明控制广播的发送和接收,确保安全性。
  5. 前台服务:在长时间运行的任务中使用前台服务,以减少服务被系统杀死的风险。

4. 总结

BroadcastReceiver 是 Android 应用程序中用于异步接收广播消息的重要组件。通过合理地使用系统广播、自定义广播、有序广播和本地广播,开发者可以实现松耦合的组件通信。与此同时,优化广播的处理流程和生命周期管理,能有效提升应用的性能和稳定性。了解和掌握 BroadcastReceiver 的高级使用和优化策略,是开发高效 Android 应用的重要技能。

欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

在这里插入图片描述

相关内容

热门资讯

解密透视!wepoker一直输... 解密透视!wepoker一直输的号能继续打吗,微信卡五星小程序辅助,手册教程(竟然有挂)-哔哩哔哩1...
迎来新发展!欢乐联盟辅助器,陕... 迎来新发展!欢乐联盟辅助器,陕西三代二辅助器,演示教程(有挂方式)-哔哩哔哩;1、首先打开陕西三代二...
昨日!佛手在线大菠萝技巧,微友... 昨日!佛手在线大菠萝技巧,微友联盟辅助,步骤教程(有挂总结)-哔哩哔哩昨日!佛手在线大菠萝技巧,微友...
解谜透视!wepoker好友房... 解谜透视!wepoker好友房开挂,微乐自建房辅助软件有哪些功能,策略教程(有挂头条)-哔哩哔哩1、...
迎来新发展!广东雀神辅助器,广... 迎来新发展!广东雀神辅助器,广东闲来辅助软件,窍门教程(有挂方法)-哔哩哔哩1、广东闲来辅助软件辅助...
针对!pokeplus脚本,钱... 针对!pokeplus脚本,钱塘十三水透视脚本,演示教程(有挂技巧)-哔哩哔哩1、钱塘十三水透视脚本...
必备透视!wepoker插件程... 必备透视!wepoker插件程序激活码,微乐小程序脚本入口,妙计教程(果真有挂)-哔哩哔哩1、wep...
更值得关注的是!广东雀神挂件脚... 更值得关注的是!广东雀神挂件脚本开挂,爱玩联盟辅助软件视频讲解,法子教程(有人有挂)-哔哩哔哩1、打...
透视讲解!sohoo poke... 透视讲解!sohoo poker辅助,一起宁德钓蟹辅助器,方针教程(有挂功能)-哔哩哔哩;在进入一起...
近期!多乐找刺激辅助,微信呢微... 近期!多乐找刺激辅助,微信呢微乐游戏辅助脚本,资料教程(有挂神器)-哔哩哔哩1、微信呢微乐游戏辅助脚...