您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)Android中Broadcast廣播機制的原理是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
首先,一個activity是如何發(fā)出一個廣播的?
是通過sendBroadcast()函數(shù),函數(shù)的參數(shù)為一個intent對象,該對象最重要的是定義了動作,將廣播發(fā)送出去后,能夠處理該動作的其他activity便能夠接收廣播,并作出響應(yīng)。
那么其他的activity是如何知道自己該接受什么動作呢?
是通過過濾器fliter。在filter中定義了能夠響應(yīng)的所有動作,如果廣播發(fā)出的動作存在于filter當(dāng)中,該activity就響應(yīng),反之忽略廣播。
那么,接受了廣播之后,該activity又該執(zhí)行什么操作呢?
這里我們要說一下,對廣播的響應(yīng)我們是通過類BroadcastReceiver來實現(xiàn)的,我們通過繼承該類,并重載其onReceive方法,能夠自定義執(zhí)行后該做的處理。
我們還需要了解什么是動作
所謂動作,即action,其實大體上說就是對要進行操作的描述。android給我們自定義了很多動作,例如 ACTION_EDIT,ACTION_VIEW,等等。它們對即將進行的操作進行了描述,就像ACTION_EDIT,就將操作描述為編輯。那么能夠?qū)?現(xiàn)編輯功能的activity就會響應(yīng)。系統(tǒng)定義的action有很多,在此不再贅述,大家想要詳細了解的話可以參考官方文檔。那么除了官方提供的,我們 用得更多的還是我們自定義的action,自己對要實現(xiàn)的動作做一個描述,通常的表示方法為“包名”+“.”+“動作描述”。例 如:“com.suns.HTTPRequestActivity.BUTTONCHANGE”,分解開 即”com.suns.HTTPRequestActivity“+“.”+"BUTTONCHANGE"。就自定義了一個按鈕變化的action。其實 這只是一個命名規(guī)律的字符串罷了,為的只是讓intent和fliter能夠?qū)?yīng),還有讓人們知道這個動作是干嘛的。
廣播能用幾種方法實現(xiàn)呢?它們有什么區(qū)別聯(lián)系?
實現(xiàn)廣播的方法有兩種。一種是在androidmanifest.xml當(dāng)中去注冊廣播,另一種方法是在代碼中動態(tài)注冊廣播,這兩種方法雖然都能實 現(xiàn)廣播機制,但是還是有很大不同,所以運用也要分情況。如果我們在androidmanifest.xml中去定義的話,那么該廣播是在activity 結(jié)束之后也不會結(jié)束的,原因在于它已經(jīng)寫在了manifest.xml文件當(dāng)中,也就是注冊到了系統(tǒng)當(dāng)中,所以無論你的activity是否存在,對于該 廣播沒有影響。而在java代碼中動態(tài)注冊廣播,在該activity結(jié)束后,我們可以注銷該廣播,也就是它隨著activity的消失而消失。這樣解 釋,大家都應(yīng)該清楚了。如果是一些系統(tǒng)應(yīng)用,比如手機沒電后震動啊,后臺計算流量啊這樣的功能,需要一直存在的,我們可以在 androidmanifest.xml中注冊,而一些只有該activity存在時才有意義的廣播,比如更改界面等等,就用動態(tài)注冊比較合 適,activity都沒了。該廣播還有什么用呢?只會浪費資源而已。
好了,說了這么多,我們還是需要用一個例子去應(yīng)用一下它。
首先先是動態(tài)注冊廣播的,點擊界面上的button后,發(fā)送更改button的廣播,然后button變?yōu)檫M度條。
代碼如下:
Broadcasttest.java:
package com.suns.ButtonChanged; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.view.View; public class Broadcasttest extends BroadcastReceiver{ @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub ButtonChangedActivity.getButton().setVisibility(View.GONE); ButtonChangedActivity.getBar().setVisibility(View.VISIBLE ); } }
下一頁將為您介紹ButtonChangeActivity.java實現(xiàn)代碼以及main.xml
ButtonChangeActivity.java:
package com.suns.ButtonChanged; import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; public class ButtonChangedActivity extends Activity { /** Called when the activity is first created. */ private static Button button=null; private static ProgressBar bar=null; private Broadcasttest t; private IntentFilter filter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button=(Button)findViewById(R.id.button); bar=(ProgressBar)findViewById(R.id.bar); button.setOnClickListener(new ButtonClick()); } public static Button getButton() { return button; } public static ProgressBar getBar() { return bar; } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); ButtonChangedActivity.this.unregisterReceiver(t); } class ButtonClick implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub t=new Broadcasttest(); filter=new IntentFilter(); filter.addAction(Intent.ACTION_EDIT); Intent intent=new Intent(); intent.setAction(Intent.ACTION_EDIT ); ButtonChangedActivity.this.registerReceiver(t, filter); ButtonChangedActivity.this.sendBroadcast(intent); } } }
我們用registerReceiver函數(shù)去注冊一個廣播響應(yīng)事件,有兩個參數(shù),***個是我們自定義的receiver對象,第二個即是過濾器。
注意:我們要在activity的onDestroy()方法中注銷該廣播!
main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="點擊" /> <ProgressBar android:id="@+id/bar" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyle" /> </LinearLayout>
關(guān)于Android中Broadcast廣播機制的原理是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。