android 51 有序广播

无序广播:一条广播发送出去,多个接收者接收没有顺序。
有序广播:广播接收者可以设置优先级,优先级高的先收到广播。
有序广播可以设置优先级。

mainActivity.java

package com.sxt.day07_06;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {
    ThirdReceiver mReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        registgerReceiver();
        Intent intent=new Intent("com.sxt.day07_06.order_broadcast");
        intent.putExtra("key", "hello java");
        sendOrderedBroadcast(intent, null);//发送有序广播
    }
    //注册第三级别的广播接收者,第一第二级别的广播接收者在系统说明文件中注册,
    private void registgerReceiver() {
        mReceiver=new ThirdReceiver();
        IntentFilter filter=new IntentFilter("com.sxt.day07_06.order_broadcast");//com.sxt.day07_06.order_broadcast广播的字符串
        filter.setPriority(600);//设置优先级
        registerReceiver(mReceiver, filter);
    }
    //java定义的第三级别的广播接收这
    class ThirdReceiver extends BroadcastReceiver{
        public void onReceive(Context context, android.content.Intent intent) {
            Log.i("main","ThirdReceiver.onReceive()");
        };
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mReceiver);//销毁的时候取消注册的广播接收者,释放资源。
    }
}

第一个广播接收者:

package com.sxt.day07_06;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class FirstReceiver extends BroadcastReceiver {

    @Override
    //优先级第一的广播接收者
    public void onReceive(Context context, Intent intent) {
        String value=intent.getStringExtra("key");//mainActivity的字符串
        Log.i("main","FirstReceiver.onReceive():"+value);
        setResultData("来源于FirstReceiver的文本");//向第二级别的广播接收者发送字符串,
    }

}

第二个广播接收者:

package com.sxt.day07_06;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class SecondReceiver extends BroadcastReceiver {

    @Override
    //优先级第二的广播接收者
    public void onReceive(Context context, Intent intent) {
        String value=intent.getStringExtra("key");//mainActivity的字符串
        String text=getResultData();//第一级别广播接收者发过来的数据
        Log.i("main","SecondReceiver.onReceive(),intent中携带的文本:"+value+","+text);
        if(isOrderedBroadcast()){//如果收到的广播是有序广播
            abortBroadcast();//终止广播
        }
    }

}

系统描述文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sxt.day07_06"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.sxt.day07_06.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="com.sxt.day07_06.FirstReceiver">   注册广播接收者
            <intent-filter android:priority="800">
                <action android:name="com.sxt.day07_06.order_broadcast"/>
            </intent-filter>
        </receiver>
        <receiver android:name="com.sxt.day07_06.SecondReceiver">
            <intent-filter android:priority="700">
                <action android:name="com.sxt.day07_06.order_broadcast"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>
时间: 2024-08-08 22:06:11

android 51 有序广播的相关文章

android有序广播和无序广播的区别

BroadcastReceiver所对应的广播分两类:普通广播和有序广播. 普通广播通过Context.sendBroadcast()方法来发送.它是完全异步的. 所有的receivers接收器的执行顺序不确定.    因此,所有的receivers接收器接收broadcast的顺序不确定. 这种方式效率更高.但是BroadcastReceiver无法使用setResult系列,getResult系列及abort系列API 有序广播是通过Context.sendOrderedBroadcast来

Android学习笔记(十二)BroadcastReceiver的有序广播和优先级

前两篇博文中简单整理了普通广播,其实还有有序广播,有序广播在开发中也是比不可少的,可以给广播接收者设定优先级来控制接受顺序,并却可以中断广播传递等等. 一.两种Broadcast: · 普通广播(Normal Broadcast):用sendBroadcast()方法发送. 普通广播是完全异步的,逻辑上可以在同一时刻被所有匹配的接受者接收到,消息传递效率高,缺点是接受者不能将处理结果传递给下一个接收者,也无法终止广播传播. · 有序广播(Ordered Broadcast):用sendOrder

Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播

BroadcastReceiver普通广播.有序广播.拦截广播.本地广播.Sticky广播.系统广播 本篇文章包括以下内容: 前言 BroadcastReceiver的简介 普通广播(自定义广播) 有序广播 拦截广播 本地广播 Sticky广播 系统广播 部分源码下载 前言 又是一篇基础总结性的文章来啦,个人强迫症犯了,非得把博客的四大组件模块给补齐了,总结了一下BoradcastReceiver的各种使用,废话不多说,开车啦.博主建议自己敲一遍代码来理解广播,因为里面有很多细节的东西需要注意,

Android(java)学习笔记179:有序广播和无序广播

之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播:   1.   我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者有优先级,接受按照先后顺序接受,类似中央向下传文件.高优先级的接受者可以把广播消息给拦截,还可以修改广播的数据.(2)无序广播> 接受者没有优先级,没有先后顺序.类似听广播,看新闻联播.不可以被拦截.> sendBroadcast(intent) (3).有序广播和无序广播没有什么本质的区别,相同

有序广播与无序广播

有序广播:按照优先级一级一级的进行传递,类似红头文件下发,有序广播可以被终止,数据可以被修改 sendOrderedBroadcast 无序广播:类似新闻联播,无论你看不看,其都正常播报,无序广播不能被终止,数据不能被修改 sendBroadcast(intent); 假设在APK-A中实现一个按钮,点击该按钮就会发送一个无序的广播,但是有没有APK接收到该广播,对于发送无序广播的APK并不关心,如果APK-B配置了接收APK-A发送的广播过滤事件,则APK-B可以接收到该广播 APK-A中实现

android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播

* 添加权限 <uses-permission android:name="android.permission.RECEIVE_SMS"/> * 4.0以后广播接收者安装以后必须手动启动一次,否则不生效 * 4.0以后广播接收者如果被手动关闭,就不会再启动了 ------------------------------------------------------------------------ #监听SD卡状态 * 清单文件中定义广播接收者接收的类型,监听SD卡常

Android入门:广播发送者与广播接收者

参考: Android入门:广播发送者与广播接收者 - xiazdong - CSDN博客http://blog.csdn.net/xiazdong/article/details/7768807 一.广播发送者&广播接收者介绍 1.广播接收者 广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据:

Android笔记(二十六) Android中的广播——BroadcastReceiver

什么是广播? 为了方便进行系统级别的消息通知,Android有一套类似广播的消息机制,每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能是来自于系统,也可能是来自于其他程序. 广播可以分为两种类型:有序广播和标准广播 标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因为它们之间没有任何先后顺序可言,这种广播的效率会比较高,但同时也意味着它是无法被截断的 如上图所示,每个人都代表一个广播接收器

17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限

?? 1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播(Normalbroadcasts)"和"有序广播(Ordered broadcasts)".普通广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播:然后有序广