中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中Broadcast廣播機制的原理是什么

發布時間:2021-06-29 14:08:26 來源:億速云 閱讀:319 作者:Leah 欄目:移動開發

這篇文章將為大家詳細講解有關Android中Broadcast廣播機制的原理是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

首先,一個activity是如何發出一個廣播的?

是通過sendBroadcast()函數,函數的參數為一個intent對象,該對象最重要的是定義了動作,將廣播發送出去后,能夠處理該動作的其他activity便能夠接收廣播,并作出響應。

那么其他的activity是如何知道自己該接受什么動作呢?

是通過過濾器fliter。在filter中定義了能夠響應的所有動作,如果廣播發出的動作存在于filter當中,該activity就響應,反之忽略廣播。

那么,接受了廣播之后,該activity又該執行什么操作呢?

這里我們要說一下,對廣播的響應我們是通過類BroadcastReceiver來實現的,我們通過繼承該類,并重載其onReceive方法,能夠自定義執行后該做的處理。

我們還需要了解什么是動作

所謂動作,即action,其實大體上說就是對要進行操作的描述。android給我們自定義了很多動作,例如 ACTION_EDIT,ACTION_VIEW,等等。它們對即將進行的操作進行了描述,就像ACTION_EDIT,就將操作描述為編輯。那么能夠實 現編輯功能的activity就會響應。系統定義的action有很多,在此不再贅述,大家想要詳細了解的話可以參考官方文檔。那么除了官方提供的,我們 用得更多的還是我們自定義的action,自己對要實現的動作做一個描述,通常的表示方法為“包名”+“.”+“動作描述”。例 如:“com.suns.HTTPRequestActivity.BUTTONCHANGE”,分解開 即”com.suns.HTTPRequestActivity“+“.”+"BUTTONCHANGE"。就自定義了一個按鈕變化的action。其實 這只是一個命名規律的字符串罷了,為的只是讓intent和fliter能夠對應,還有讓人們知道這個動作是干嘛的。

廣播能用幾種方法實現呢?它們有什么區別聯系?

實現廣播的方法有兩種。一種是在androidmanifest.xml當中去注冊廣播,另一種方法是在代碼中動態注冊廣播,這兩種方法雖然都能實 現廣播機制,但是還是有很大不同,所以運用也要分情況。如果我們在androidmanifest.xml中去定義的話,那么該廣播是在activity 結束之后也不會結束的,原因在于它已經寫在了manifest.xml文件當中,也就是注冊到了系統當中,所以無論你的activity是否存在,對于該 廣播沒有影響。而在java代碼中動態注冊廣播,在該activity結束后,我們可以注銷該廣播,也就是它隨著activity的消失而消失。這樣解 釋,大家都應該清楚了。如果是一些系統應用,比如手機沒電后震動啊,后臺計算流量啊這樣的功能,需要一直存在的,我們可以在 androidmanifest.xml中注冊,而一些只有該activity存在時才有意義的廣播,比如更改界面等等,就用動態注冊比較合 適,activity都沒了。該廣播還有什么用呢?只會浪費資源而已。

好了,說了這么多,我們還是需要用一個例子去應用一下它。

首先先是動態注冊廣播的,點擊界面上的button后,發送更改button的廣播,然后button變為進度條。

代碼如下:

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實現代碼以及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函數去注冊一個廣播響應事件,有兩個參數,***個是我們自定義的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>

關于Android中Broadcast廣播機制的原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

敖汉旗| 陵川县| 金堂县| 积石山| 南阳市| 泌阳县| 鄱阳县| 陵川县| 沛县| 玛曲县| 鹤庆县| 蒙自县| 五河县| 行唐县| 阳山县| 唐海县| 海林市| 师宗县| 光泽县| 延吉市| 胶南市| 新宁县| 巴彦淖尔市| 原平市| 富川| 行唐县| 大同县| 邳州市| 吴桥县| 罗城| 固阳县| 陇南市| 茶陵县| 和田县| 吴桥县| 大名县| 商都县| 灵璧县| 宁武县| 万年县| 苍溪县|