Android广播机制
16lz
2022-04-22
广播接收器可以接收广播,分为动态注册(代码实现)和静态注册(AndroidManifest中注册)
动态注册示例代码:
public class Main2Activity extends AppCompatActivity { private IntentFilter intentFilter; private BroadcastReceiver broadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); intentFilter=new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); broadcastReceiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo(); if (networkInfo!=null&&networkInfo.isAvailable()){ System.out.println("network is available"); }else { System.out.println("network is unavailable"); } } }; registerReceiver(broadcastReceiver,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(broadcastReceiver); }}
AndroidManifest中静态注册
广播不允许开启线程,所以不要在receive()中写耗时的操作,通常广播接收器接收到广播之后打开程序的其他组件
广播分为标准广播和有序广播
标准广播:异步执行的广播,可以被其他广播接收器同时接收,效率高
有序广播:同步执行的广播,同一时间只能有一个广播器可以接收,优先级高的广播接收器先收到消息,可以拦截
发送标准广播:
Intent intent=new Intent("com.example.administrator.layouttest002.Test");sendBroadcast(intent);
发送有序广播:
Intent intent=new Intent("com.example.administrator.layouttest002.Test");sendOrderedBroadcast(intent,null);
有序广播截断
abortBroadcase();
本地广播
LocalBroadcastManager用这个类发送广播,注册广播接收器
(具体代码就不放了,和广播同理)
广播可以用在BaseActivity类中实现任何activity的强制下线功能
更多相关文章
- Android(安卓)installed app, never used, cannot receiver Broa
- Android(安卓)关闭所有的Activity
- Android(安卓)Adb Analyse
- IPPH-发送广播
- Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)
- Android(安卓)UDP广播包抓取
- android 中 intent和intent action大全
- Android(安卓)获取电池电量
- Android:媒体按键消息