zoukankan      html  css  js  c++  java
  • Android -- 发送Broadcast、有序无序

    普通广播                                                                                    

    • 优缺点:和有序广播的优缺点相反!
    • 发送广播的方法:sendBroadcast()

    有序广播                                                                                  

    • 优缺点

    优点:1,按优先级的不同,优先Receiver可对数据进行处理,并传给下一个Receiver

    2,通过abortBroadcast可终止广播的传播  

    缺点:效率低  

    • 发送广播的方法:sendOrderedBroadcast()
    • 优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,下一个Receiver 通过 Bundle bundle=getResultExtras(true)方法获取上一个 Receiver传来的数据。

    工程                                                                                          

    imageMainActivity.java是程序住进口。

    MyBroadcastReceiver.java等都是广播接收者,只是等级不一样。

    FinalRecevier.java是有序广播的时候,即使广播被拦截了,这个还是可以接收到广播的。

    <receiver android:name=".MyBroadcastReceiver">
                <intent-filter android:priority="1000">
                    <action android:name="com.yydcdut.nima"/>
                </intent-filter>
            </receiver>
            <receiver android:name=".MyBroadcastReceiver2">
                <intent-filter android:priority="100">
                    <action android:name="com.yydcdut.nima"/>
                </intent-filter>
            </receiver>
            <receiver android:name=".MyBroadcastReceiver3">
                <intent-filter android:priority="10">
                    <action android:name="com.yydcdut.nima"/>
                </intent-filter>
            </receiver>
            <receiver android:name=".FinalRecevier">
                <intent-filter>
                    <action android:name="com.yydcdut.nima"/>
                </intent-filter>
            </receiver>

    在MyBroadcastReceiver.java中,代码都差不多:

    public class MyBroadcastReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            System.out.println("MyBroadcastReceiver1111111接受到的广播");
            Toast.makeText(context, "MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
            
        }
    
    }

    在MainActivity.java中:

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        public void click(View view)
        {
            Intent intent = new Intent();
            intent.setAction("com.yydcdut.nima");
            //无序广播
            sendBroadcast(intent);
            //有序广播
            //sendOrderedBroadcast(intent, null);
            
            //sendOrderedBroadcast(intent, null, new FinalRecevier(), null, 0, null, null);
        }
    }

    在某个广播接收的类中加入

    abortBroadcast();

    这是去拦截广播,但是FinalRecevier还是接收到了的,无论怎么拦截广播。

    我是天王盖地虎的分割线                                                                

    源代码:http://pan.baidu.com/s/1dD1Qx01

    广播发送.zip

    转载请注明出处:http://www.cnblogs.com/yydcdut

  • 相关阅读:
    Log4Net 发布后不能用
    主机ping不通虚拟机
    c# Delegate 和 Events
    ADO.NET
    .NET Windows Service
    Linux 常用命令三 touch mkdir
    Linux 常用命令二 pwd cd
    Linux 常用命令一 ls
    python 面向对象六 动态添加方法 __slots__限制动态添加方法
    python 面向对象六 类属性和实例属性
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3803666.html
Copyright © 2011-2022 走看看