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:

        <receiver
            android:name=".receiver.MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.administrator.broadcastsenddemo"/>
            </intent-filter>
        </receiver>

该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、点击按钮可以看到结果:

4、总结:

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值