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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com