有序廣播和標准廣播 --Android開發


一、標准廣播和有序廣播也很容易理解的。

標准廣播:

(1)通過sendBroadcast()方法發送

(2)通過異步方式發送,廣播接收者的執行順序是不明確的

有序廣播:

(1)通過sendOrderBroadcast()發送

(2)廣播接收者需要按照優先級依次執行

(3)可以使用setResultXXX()、getResultXXX()、abortBroadcast()方法

二、通過簡單例子來實現一下標准廣播和有序廣播

1、很簡單的例子,先看一下主布局。

2、主活動需要實現發送標准廣播和有序廣播,下面是主活動核心代碼。

MainActivity.java:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onClick(View view) {
Intent intent = new Intent();
intent.setAction("com.thanlon.broadcastReceiverType");
switch (view.getId()) {
case R.id.order_send_btn://發送有序廣播,有序廣播通過優先級去
     sendOrderedBroadcast(intent, null);
   Log.d("Thanlon","發送了有序廣播");
 break;
case R.id.disorder_send_btn://
發送標准廣播
  sendBroadcast(intent, null);
  Log.d("Thanlon","
發送了標准廣播");
  break;
}
}
}

3、接收廣播的類。

這里寫了三個繼承了BroadcastReceiver的類來實現接收廣播:

MyBroadcastReveiver1.java:

public class MyBroadcastReveiver1 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Thanlon","MyBroadcastReveiver1接收到廣播");
}
}

MyBroadcastReveiver2.java:

public class MyBroadcastReveiver2 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Thanlon","MyBroadcastReveiver1接收到廣播");
}
}

MyBroadcastReveiver3.java:

public class MyBroadcastReveiver3 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Thanlon","MyBroadcastReveiver1接收到廣播");
}
}

4、注冊BroadcastReceiver

AndroidManifest.xml:(在<application>標簽里,<activity>結束標簽的下面添加如下代碼)

<receiver android:name=".MyBroadcastReveiver1">
<!--優先級通過取值來判斷優先級先后,優先級取值為-1000~1000,值越大優先級越高,越先接收廣播;如果優先級一樣,則哪個廣播先注冊就先執行-->
<intent-filter android:priority="1">
<action android:name="com.thanlon.broadcastReceiverType" />
</intent-filter>
</receiver>

<receiver android:name=".MyBroadcastReveiver2">
<intent-filter android:priority="2">
<action android:name="com.thanlon.broadcastReceiverType" />
</intent-filter>
</receiver>

<receiver android:name=".MyBroadcastReveiver3">
<intent-filter android:priority="3">
<action android:name="com.thanlon.broadcastReceiverType" />
</intent-filter>
</receiver>

當發送有序廣播的時,要根據優先級來判斷哪個廣播先執行。為了很好的證明,在配置文件中設置了不同的優先級。如果優先級相同,如何判斷哪個先執行?先注冊的,先執行。

5、測試

很明顯有序廣播是由優先級的高低來決定的。由於接收廣播的類較少,標准廣播不易被體現出來,只需知道就收廣播的順序是不同的就行了,在這里不進行演示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM