Android广播机制

广播接收器可以接收广播,分为动态注册(代码实现)和静态注册(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概念)