担路网做网站多少钱,网站建设要什么,十大营销手段,室内设计这个行业怎么样文章目录 深入分析 Android BroadcastReceiver (三)1. 广播消息的优缺点及使用场景1.1 优点1.2 缺点 2. 广播的使用场景及代码示例2.1. 系统广播示例#xff1a;监听网络状态变化 2.2. 自定义广播示例#xff1a;发送自定义广播 2.3. 有序广播示例#xff1a;有序广播 2.4. … 文章目录 深入分析 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 缺点
性能问题在主线程中处理广播消息如果操作耗时会导致应用卡顿。安全性公开广播可能被其他应用接收和发送可能带来安全隐患需要合理使用权限管理。电量消耗频繁的广播通信会增加设备的电量消耗尤其是在后台频繁接收广播时。
2. 广播的使用场景及代码示例
2.1. 系统广播
系统广播是 Android 系统在特定事件发生时发出的广播比如设备启动完成、网络状态变化等。
示例监听网络状态变化
在 AndroidManifest.xml 中声明接收器
receiver android:name.NetworkChangeReceiverintent-filteraction android:nameandroid.net.conn.CONNECTIVITY_CHANGE//intent-filter
/receiver接收器实现
public class NetworkChangeReceiver extends BroadcastReceiver {Overridepublic 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 中声明接收器
receiver android:name.CustomReceiverintent-filteraction android:namecom.example.CUSTOM_ACTION//intent-filter
/receiver接收器实现
public class CustomReceiver extends BroadcastReceiver {Overridepublic 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 中声明接收器并设置优先级
receiver android:name.FirstReceiver android:priority100intent-filteraction android:namecom.example.ORDERED_ACTION//intent-filter
/receiverreceiver android:name.SecondReceiver android:priority50intent-filteraction android:namecom.example.ORDERED_ACTION//intent-filter
/receiver接收器实现
public class FirstReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, First Receiver, Toast.LENGTH_SHORT).show();// 继续传播广播}
}public class SecondReceiver extends BroadcastReceiver {Overridepublic 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() {Overridepublic void onReceive(Context context, Intent intent) {String data intent.getStringExtra(data);Toast.makeText(context, Received: data, Toast.LENGTH_SHORT).show();}
};3. 优化策略
避免耗时操作在 onReceive 中避免执行耗时操作使用 IntentService 或者其他异步机制。动态注册和取消注册在合适的生命周期方法中注册和取消注册接收器避免内存泄漏。合理使用本地广播尽量使用 LocalBroadcastManager 进行应用内广播避免不必要的跨进程通信。权限管理通过权限声明控制广播的发送和接收确保安全性。前台服务在长时间运行的任务中使用前台服务以减少服务被系统杀死的风险。
4. 总结
BroadcastReceiver 是 Android 应用程序中用于异步接收广播消息的重要组件。通过合理地使用系统广播、自定义广播、有序广播和本地广播开发者可以实现松耦合的组件通信。与此同时优化广播的处理流程和生命周期管理能有效提升应用的性能和稳定性。了解和掌握 BroadcastReceiver 的高级使用和优化策略是开发高效 Android 应用的重要技能。 欢迎点赞|关注|收藏|评论您的肯定是我创作的动力