详解广播机制(借鉴郭霖老师著作)

为了便于进行系统级别的消息通知,Android引入了一套类似现实生活中广播的消息机制。

Android 中的每个应用程序都可以对自己感兴趣的广播进行注册,这样程序就只会接收到自己感兴趣的广播内容,这些广播可能来自于系统,来自于其他应用程序。

Android中的广播主要分成两种:标准广播和有序广播。

标准广播是一种完全异步执行的广播,在广播发出之后,所有广播接收器都会在同一时刻接收到这条广播消息。

有序广播是同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收到这条广播消息。

接收广播系统------广播接收器

注册广播的方式有两种,在代码中注册被叫做动态注册。而在AndroidMainfest.xml中注册则被叫做静态注册。

如何创建一个广播接收器? 我们只需要新建一个类,并且让它继承BroadcastReceiver, 然后重写父类的onReceive()方法。这样当有广播来时,onReceive()方法就会得到执行,我们可以在这个方法里面添加具体的逻辑。

下面我们通过一个例子来了解一下广播接收器的基本用法。



public class MainActivity extends AppCompatActivity {
    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter =new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver=new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver,intentFilter);


    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
       unregisterReceiver(networkChangeReceiver);

    }
      class NetworkChangeReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent){
            Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show();

        }

    }
}

首先,我们在MainActivity中定义了一个内部类,让它继承BroadcastReceiver,并且重写了父类的onReceiver()方法。

接着,我们新建一个IntentFilter的实例,并且给它添加了一个值为android.net.conn.CONNECTIVITY_CHANGEaction.

接着我们又实例了一个NetworkChangeReceiver对象

调用registerReceiver()方法进行注册,将NetworhChangeReceiver的实例和IntentFilter的实例传进去。这样就实现了监听网络变化的功能。

注意,动态注册的广播接收器一定都要取消注册,我们在onDestroy()方法中通过调用unregisterReceiver()方法来实现。



发布了37 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/OneLinee/article/details/77914725