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

  • 相关阅读:
    C++——STL内存清除
    c++——智能指针学习(unique_ptr)
    linux下将tomcat加入服务
    linux下oracle远程连接的问题
    oracle计算容量的方式
    oracle删除表的方式
    阻塞与非阻塞的区别
    java中queue的使用
    yum源
    VMware Tools 安装
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3803666.html
Copyright © 2011-2022 走看看