广播接收器(BroadcastReceiver)

定义:

是一个全局监听器,属于Android四大组件之一

广播分为两个角色:广播发送者,广播接收者

广播接收器分为两种(静态注册,动态注册)

区别

使用方式:

静态注册:

在AndroidManifest.xml里通过标签里声明

由于手机8.0以后不支持静态注册所以需要加"intent.setComponent(new ComponentName(this, Receiver.class));"


动态注册:

在代码中调运Context.registerReceiver()方法

特点:

最后都要解注册(动态)

@Override

protected void onPause() {

super.onPause();

//解注册

    unregisterReceiver(bigReceiver);

unregisterReceiver(netReceiveer);

unregisterReceiver(bigTwoReceiver);

unregisterReceiver(localReceiver);

}

静态注册:

①常驻,不受任何生命周期影响

②缺点:耗电,占内存

动态注册:

非常驻,灵活跟随组件的生命周期变化

应用场景:

静态注册:

需要时刻监听广播

动态注册:

需要特定时刻监听广播


广播的主要类型:

~普通广播

首先自定义一个类(继承自BroadcastReceiver)

重写onReceive方法(静态动态都是先继承然后重写onReceive方法)

(静态)

public class Receiverextends BroadcastReceiver {

@Override

    public void onReceive(Context context, Intent intent) {

                Toast.makeText(context,"收到普通广播", Toast.LENGTH_SHORT).show();

                Log.i("tag","收到普通广播");

}

}

(动态)

public class BigReceiverextends BroadcastReceiver {

@Override

    public void onReceive(Context context, Intent intent) {

Toast.makeText(context,"动态注册收到普通广播", Toast.LENGTH_SHORT).show();

Log.i("tag","动态注册收到普通广播");

}

}

静态注册:

XML内通过receiver标签声明

在Activity类中:

//普通广播

private void normal() {

Intent intent =new Intent("com.example.advanced8_1_activity.Receiver");

sendBroadcast(intent);

}

动态注册:

在ReSume方法中注册广播

//动态注册

@Override

protected void onResume() {

super.onResume();

//获取广播对象

    bigReceiver =new BigReceiver();

//添加过滤器

    IntentFilter intentFilter =new IntentFilter();

intentFilter.addAction("com.example.advanced8_1_activity.Receiver");

//注册广播

    registerReceiver(bigReceiver, intentFilter);

}

在onPause方法中解注册

@Override

protected void onPause() {

super.onPause();

//解注册

    unregisterReceiver(bigReceiver);

}

~系统广播

//本地广播

private void local() {

Intent intent =new Intent("com.example.advanced8_1_activity.LocalReceiver");

localBroadcastManager.sendBroadcast(intent);

}

@Override

protected void onResume() {

super.onResume();

localBroadcastManager = LocalBroadcastManager.getInstance(this);

//获取广播对象

localReceiver =new LocalReceiver();

//添加过滤器

IntentFilter intentFilter3 =new IntentFilter();

intentFilter3.addAction("com.example.advanced8_1_activity.LocalReceiver");

//注册广播

localBroadcastManager.registerReceiver(localReceiver, intentFilter3);

}


~有序广播

private void ordered() {

//有序广播

    Intent intent =new Intent("com.example.advanced8_1_activity.Receiver");

sendOrderedBroadcast(intent,null);

}

protected void onResume() {

super.onResume();

//获取广播对象

netReceiveer =new NetReceiveer();

bigTwoReceiver =new BigTwoReceiver();

//添加过滤器

IntentFilter intentFilter =new IntentFilter();

intentFilter.addAction("com.example.advanced8_1_activity.Receiver");

//优先级高先收到

intentFilter.setPriority(100);

IntentFilter intentFilter2 =new IntentFilter();

intentFilter2.addAction("com.example.advanced8_1_activity.Receiver");

intentFilter2.setPriority(200);

//注册广播

registerReceiver(bigReceiver, intentFilter);

registerReceiver(bigTwoReceiver, intentFilter2);

}

~粘性广播

~App应用内广播

你可能感兴趣的:(广播接收器(BroadcastReceiver))