注册网站怎么做网站,wordpress关闭媒体库功能,医疗网站建设计划书,钙网logo设计Android 跨进程之间通信
Android 跨进程之间通信(IPC)方式之BroadcastReceiverAndroid 跨进程之间通信(IPC)方式之ContentProvider 文章目录 Android 跨进程之间通信前言一、关于系统广播二、如何利用BroadcastReceiver跨进程通信1.创建广播接收器2.清单文件中声明注册3.发送广…Android 跨进程之间通信
Android 跨进程之间通信(IPC)方式之BroadcastReceiverAndroid 跨进程之间通信(IPC)方式之ContentProvider 文章目录 Android 跨进程之间通信前言一、关于系统广播二、如何利用BroadcastReceiver跨进程通信1.创建广播接收器2.清单文件中声明注册3.发送广播4.杀掉进程测试 小结 前言
广播是 Android 系统中一种强大的通信机制它允许应用程序中的不同组件之间进行信息交流甚至跨越不同应用程序之间进行通信。它类似于一个发布者-订阅者模式其中一个组件可以发送广播而其他组件则可以注册监听并在特定条件下接收这些广播消息。
广播可以被用来传递各种类型的信息比如设备状态的变化、系统事件、应用内部的消息等。它的灵活性和普适性使得开发者可以利用广播来实现诸如实时更新UI、触发特定操作、响应系统级事件等功能。通过广播Android 应用程序可以与用户进行无缝互动并实现多个组件之间的松耦合通信这对于实现复杂的应用逻辑和提升用户体验至关重要。 一、关于系统广播
系统会在发生各种系统事件时自动发送广播例如当系统进入和退出飞行模式时。系统广播会被发送给所有同意接收相关事件的应用。 广播消息本身会被封装在一个 Intent 对象中该对象的操作字符串会标识所发生的事件例如 android.intent.action.AIRPLANE_MODE。该 Intent 可能还包含绑定到其extra 字段中的附加信息。例如飞行模式 intent 包含布尔值 extra 来指示是否已开启飞行模式。
二、如何利用BroadcastReceiver跨进程通信
我们创建两个项目一个是项目A另一个是项目B。用两个不同项目来模拟两个进程之间的通信效果在
1.创建广播接收器 在A项目中创建 BroadcastReceiver 子类并实现 onReceive(Context, Intent)。以下示例中的广播接收器会记录并显示广播的内容 public class AReceiver extends BroadcastReceiver {private static final String ACTION_CUSTOM_BROADCAST_B com.xzhy.ademo.ACTION_CUSTOM_BROADCAST_B;private static final String EXTRA_MESSAGE message;Overridepublic void onReceive(Context context, Intent intent) {String action intent.getAction();if (ACTION_CUSTOM_BROADCAST_B.equals(action)) {String message intent.getStringExtra(EXTRA_MESSAGE);Log.d(AReceiver, --- AReceiver onReceive message: message);}}
}2.清单文件中声明注册 在A项目中清单中声明广播接收器 receiver android:name.AReceiverandroid:exportedtrueintent-filteraction android:namecom.xzhy.ademo.ACTION_CUSTOM_BROADCAST_B //intent-filter/receiver3.发送广播
Android 为应用提供三种方式来发送广播
sendOrderedBroadcast(Intent, String) 方法一次向一个接收器发送广播。当接收器逐个顺序执行时接收器可以向下传递结果也可以完全中止广播使其不再传递给其他接收器。接收器的运行顺序可以通过匹配的 intent-filter 的 android:priority 属性来控制具有相同优先级的接收器将按随机顺序运行。sendBroadcast(Intent) 方法会按随机的顺序向所有接收器发送广播。这称为常规广播。这种方法效率更高但也意味着接收器无法从其他接收器读取结果无法传递从广播中收到的数据也无法中止广播。LocalBroadcastManager.sendBroadcast 方法会将广播发送给与发送器位于同一应用中的接收器。如果您不需要跨应用发送广播请使用本地广播。这种实现方法的效率更高无需进行进程间通信而且您无需担心其他应用在收发您的广播时带来的任何安全问题。 我们在B项目中用sendBroadcast(Intent) 向A项目发送一条广播消息代码如下。 Intent intent new Intent(com.xzhy.ademo.ACTION_CUSTOM_BROADCAST_B);intent.setPackage(com.xzhy.ademo); // 设置接收广播的应用包名intent.putExtra(message, Hello,这里是B面 Demo 的默认消息~);sendBroadcast(intent);先打开A项目保持在后台运行再打开B项目会发行A项目的日志显示已经收到了B发送的广播消息。既然B发送广播给A能够正常送达那么A发送给B消息只要和上面的步骤一样就可以做到A、B进程之间相互通信了。
4.杀掉进程测试 在A进程被系统意外杀死或者说主动关闭掉的话B通过广播发送消息给A通过日志可以发现A是无法收到消息。 B日志显示已经发送了广播消息但是A的日志情况显示没有收到B发送的消息 小结
本文简单的介绍了如何利用广播在两个不同进程内进行相互通信操作但是广播的接收者必须在运行状态下才能接收到广播消息。当一个进程被杀死时它注册的广播接收者也会随之销毁因此其他进程发送的广播消息将无法被接收到。因为广播是一种基于 Android 组件的通信方式需要组件处于活动状态才能接收到广播。