自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android Broadcast廣播機制深入解析

移動開發(fā) Android
在Android中,有一些操作完成以后,會發(fā)送廣播,比如說發(fā)出一條短信,或打出一個電話,如果某個程序接收了這個廣播,就會做相應的處理。這個廣播跟我們傳統(tǒng)意義中的電臺廣播有些相之處。之所以叫做廣播,就是因為它只負責“說”而不管你“聽不聽”,也就是不管你接收方如何處理。另外,廣播可以被不只一個應用程序所接收,當然也可能不被任何應用程序所接收。

眾所周知,Android的四大組件是Activity,Service,ContentProvider和Broadcast??梢?Broadcast的重要性。何謂廣播機制,我想大家對廣播肯定不陌生,發(fā)出去的廣播,是沒有任何目的性的,沒有一個明確的目標,至于誰會收到,發(fā)送廣播 的人肯定不會知道。

android中的broadcast也是如此,一個activity發(fā)出廣播,也并不知道哪個activity會響應。那么是什么樣的activity會響應呢?一個activity是如何發(fā)送廣播呢?對于廣播我們又該如何處理呢?下面我們來一步一步了解。

首先,一個activity是如何發(fā)出一個廣播的?

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

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

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

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

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

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

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

廣播能用幾種方法實現(xiàn)呢?它們有什么區(qū)別聯(lián)系?

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

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

首先先是動態(tài)注冊廣播的,點擊界面上的button后,發(fā)送更改button的廣播,然后button變?yōu)檫M度條。

代碼如下:

Broadcasttest.java:

  1. package com.suns.ButtonChanged;  
  2.   
  3. import android.content.BroadcastReceiver;   
  4. import android.content.Context;   
  5. import android.content.Intent;   
  6. import android.view.View;  
  7.   
  8. public class Broadcasttest extends BroadcastReceiver{  
  9.   
  10.     @Override   
  11.     public void onReceive(Context arg0, Intent arg1) {   
  12.         // TODO Auto-generated method stub   
  13.         ButtonChangedActivity.getButton().setVisibility(View.GONE);   
  14.         ButtonChangedActivity.getBar().setVisibility(View.VISIBLE );   
  15.           
  16.     }  

下一頁將為您介紹ButtonChangeActivity.java實現(xiàn)代碼以及main.xml

#p#

ButtonChangeActivity.java:

  1. package com.suns.ButtonChanged; 
  2.   
  3.  import android.app.Activity;  
  4.  import android.content.Intent;  
  5.  import android.content.IntentFilter;  
  6.  import android.os.Bundle;  
  7.  import android.view.View;  
  8.  import android.view.View.OnClickListener;  
  9.  import android.widget.Button;  
  10.  import android.widget.ProgressBar; 
  11.   
  12.  public class ButtonChangedActivity extends Activity {  
  13.      /** Called when the activity is first created. */  
  14.      private static Button button=null;  
  15.      private static ProgressBar bar=null;  
  16.      private Broadcasttest t;  
  17.      private IntentFilter filter;  
  18.      @Override  
  19.      public void onCreate(Bundle savedInstanceState) {  
  20.          super.onCreate(savedInstanceState);  
  21.          setContentView(R.layout.main);  
  22.          button=(Button)findViewById(R.id.button);  
  23.          bar=(ProgressBar)findViewById(R.id.bar);  
  24.          button.setOnClickListener(new ButtonClick());  
  25.      }  
  26.       
  27.      public static Button getButton()  
  28.      {  
  29.          return button;  
  30.      }       
  31.      public static ProgressBar getBar()  
  32.      {  
  33.          return bar;  
  34.      }  
  35.       
  36.       
  37.      @Override  
  38.      protected void onDestroy() {  
  39.          // TODO Auto-generated method stub  
  40.          super.onDestroy();  
  41.          ButtonChangedActivity.this.unregisterReceiver(t);         
  42.      } 
  43.   
  44.      class ButtonClick implements OnClickListener  
  45.      { 
  46.   
  47.          @Override  
  48.          public void onClick(View v) {  
  49.              // TODO Auto-generated method stub  
  50.              t=new Broadcasttest();  
  51.              filter=new IntentFilter();  
  52.              filter.addAction(Intent.ACTION_EDIT);  
  53.              Intent intent=new Intent();  
  54.              intent.setAction(Intent.ACTION_EDIT );  
  55.              ButtonChangedActivity.this.registerReceiver(t, filter);  
  56.              ButtonChangedActivity.this.sendBroadcast(intent);  
  57.           
  58.          }  
  59.      }  

我們用registerReceiver函數(shù)去注冊一個廣播響應事件,有兩個參數(shù),***個是我們自定義的receiver對象,第二個即是過濾器。

注意:我們要在activity的onDestroy()方法中注銷該廣播!

main.xml:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.      android:layout_width="fill_parent"  
  4.      android:layout_height="fill_parent"  
  5.      android:orientation="vertical" >       
  6.      <Button  
  7.          android:id="@+id/button"  
  8.          android:layout_width="fill_parent"  
  9.          android:layout_height="wrap_content"  
  10.          android:text="點擊"  
  11.          />  
  12.      <ProgressBar  
  13.          android:id="@+id/bar"  
  14.          android:visibility="gone"  
  15.          android:layout_width="wrap_content"  
  16.          android:layout_height="wrap_content"  
  17.          style="?android:attr/progressBarStyle"  
  18.          />      
  19.  </LinearLayout> 

 

責任編輯:閆佳明 來源: cnblogs
相關(guān)推薦

2021-11-24 08:33:09

Android廣播機制應用程序

2024-12-18 21:37:24

2010-10-08 10:42:30

2013-11-26 16:32:47

Android關(guān)機移動編程

2025-01-24 08:19:57

2017-05-03 17:00:16

Android渲染機制

2014-06-23 10:31:09

Android啟動過程

2024-09-30 09:13:14

協(xié)調(diào)通信機制

2013-04-24 11:15:56

Android開發(fā)Touch事件傳遞機制

2021-09-15 07:31:33

Android窗口管理

2023-09-26 08:01:46

消費者TopicRocketMQ

2017-07-12 14:58:21

AndroidInstant Run

2014-12-10 10:37:45

Android自定義布局

2016-05-18 17:15:17

互動出版網(wǎng)

2024-07-30 12:24:23

2017-02-21 12:20:20

Android事件分發(fā)機制實例解析

2021-09-09 06:55:43

AndroidViewDragHel原理

2025-01-02 14:50:34

MyBatis開發(fā)緩存

2021-10-15 09:19:17

AndroidSharedPrefe分析源碼

2010-08-04 13:52:53

Flex事件機制
點贊
收藏

51CTO技術(shù)棧公眾號