Android8.0 静态广播的改动(可跨进程)

Android8.0取消了大部分的静态广播的注册,可以参考广播限制,使用以前发送广播的方式是不能够调起注册的静态广播的。这里直接用跨进程(两个APP)通信的方式进行展示,在同一个进程中也是一样的:

1、建立一个接收广播的Demo,在该Demo中新建一个广播接收器,静态注册,代码如下:

package com.example.administrator.broadcastreceivedemo.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"接收到广播",Toast.LENGTH_SHORT).show();
    }
}

manifest:

        
            
                
            
        

该Demo的包名是:

com.example.administrator.broadcastreceivedemo

2、建立一个发送广播的Demo,页面上只有一个Button,用于点击发送广播,代码如下:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.example.administrator.broadcastsenddemo");
                intent.setComponent(new ComponentName("com.example.administrator.broadcastreceivedemo","com.example.administrator.broadcastreceivedemo.receiver.MyReceiver"));
                sendBroadcast(intent);
            }
        });

这里就可以看出和以前发送广播的区别了,Intent设置了Component。ComponentName有两个参数,第一个参数是广播接收器所在应用的包名,第二个参数是广播接收器的全路径。可以与上面我们在第一步中建立接收广播的Demo进行对比。

3、点击按钮可以看到结果:

Android8.0 静态广播的改动(可跨进程)_第1张图片

4、总结:

其实就是将原来的隐式Intent替换为现在的显式Intent,减少内存开销,优化系统。

你可能感兴趣的:(Android8.0 静态广播的改动(可跨进程))