Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android游戲開發之交互式通信

Android游戲開發之交互式通信

編輯:關於Android編程

在Android平台下,應用程序可以方便地調用其他應用程序的功能來實現自己的功能需求,這是Android的特性之一,本文將向讀者介紹Android程序內部或程序之間進行交互式通信的方式。

1.Android應用程序的基本組件

Android應用程序的基本組件包括Activity、Service、BroadcastReceiver和ContentProvider等,不同組件具有不同的特性以及各自的聲明周期,下面就來對每個組件做一個簡單的介紹。

(1)Activity組件

Activity是最常見的一種Android組件,每個Activity都相當於一個屏幕,其為用戶提供了進行交互的可視界面。應用程序可以根據需要包含一個活多個Activity,這些Activity一般都繼承自android.app包下的Activity類,並且這些Activity之間的運行是相互獨立的。Activity的生命周期主要包含3個階段。

1)運行態(running state)

此時Activity顯示在屏幕前台,並且具有焦點,可以和用戶的操作進行交互。

2)暫停態(paused state)

此時Activity失去焦點,並被其它的運行態Activity取代在屏幕前台顯示,暫停態的Activity仍然保留其狀態和成員等其它信息,當系統的內存非常匮乏時,暫停態的Activity會被結束掉以獲得更多的資源。

3)停止態(stopped state)

停止態的Activity不僅沒有焦點,而且是完全不可見的,雖然其也保留狀態和成員等信息,停止態的Activity會在系統需要的時候被結束。

當Activity在不同的狀態之間切換時,可以通過重寫相應的回調方法來編寫狀態改變時應該執行的動作。

(2)Service組件

Service沒有提供與用戶進行交互的表示層。Service是運行在後台的一種Android組件,當應用程序需要進行某種不需要前台顯示的計算或數據處理時,就可以啟動一個Service來完成,每個Service都繼承自android.app包下的Service類。

Service一般由Activity或其他Context對象來啟動,當啟動Service之後,該Service將會在後台運行,即使啟動這個Service得Activity或其他組件的生命周期已經結束,Service仍然會繼續運行,直到自己的生命周期結束為止。每個Service都應該在AndroidMainfest.xml中進行聲明。Service的啟動方式有兩種,對應的生命周期也各不相同。

(1)通過startService方法啟動。當系統調用startService方法時,如果該Service還未啟動,則依次調用其onCreate方法和onStart方法來啟動。當其他Context對象調用stopService方法、Service調用自稱的stopSelf或stopService方法時才會停止Service的執行。

(2)通過bindService方法啟動。當系統調用bindService方法時,如果該Service未啟動,則會調用其onCreate方法完成初始化工作,然後會將該Service和Context對象(如Activity)進行綁定,當被綁定的Context對象被銷毀時,與之綁在一起的Service也會停止運行。

需要注意的是,盡管存在兩種方式啟動Service,但是無論Service是通過什麼方式啟動的,都可以將其與Context對象進行綁定。

(3)Broadcast Receiver組件

Broadcast Receiver也不提供與用戶交互的表示層,其是一種負責接收廣播消息並對消息作出反應的組件。在Android的系統中就存在許多這樣的廣播,比如電池電量過低或信號過低時,系統就會發出廣播進行通知。

應用程序如果需要響應某個廣播消息,應該注冊對應的BroadcastReceiver對象,該對象繼承自BroadcastReceiver類,該類位於Android.content包下。

1)BroadcastReceiver發布廣播的方式

發布一個廣播比較容易,在需要的地方創建一個Intent對象,將信息的內容和用於過濾的信息封裝起來,通過調用Context.sendBroadcast方法、Context.sendOrderedBroadcast方法或者Context.sendStickyBroadcast方法將該Intent對象廣播出去,淡出發布廣播方式的區別如下。

通常,使用sendBroadcast或sendStickyBroadcast發送出去的Intent,所有滿足條件的BroadcastReceiver都會執行其onReceive方法。但若有多個滿足條件的BroadcastReceiver,其執行onReceive方法的順序是沒有保證的。而通過sendOederedBroadcast方法發送出去的Intent,會根據BroadcastReceiver注冊時IntentFilter設置的優先級的順序來執行onReceive方法,相同優先級的BroadcastReceiver執行onReceiver方法的順序是沒有保證的。

sendStickyBroadcast主要的不同是,Intent在發送後會一直存在,並且在以後調用registerReceiver注冊相匹配的Receiver時會把這個Intent對象直接返回給新注冊的Receiver。

2)BroadcastReceiver接收廣播的方式

發布的廣播實體是Intent,那麼接收廣播的時候就需要通過IntentFilter對象來進行過濾。BroadcastReceiver的生命周期比較簡單,只有一個回調方法--onReceive,該方法在應用程序接收到發給自己廣播時候調用,所以BroadcastReceiver的使用方法也相對簡單,只需要對onReceive方法進行合理重寫,在適當的地方注冊該Broadcast Receiver即可。

在AndroidMainfest.xml文件中聲明。注冊信息包含在標簽中,並在標簽內設定過濾規則。

在代碼中創建並設置IntentFilter對象。該IntentFilter對象包含了對廣播的過濾規則,然後再需要的地方調用Context.registerReceiver方法和Context.unregisterReceiver方法進行注冊和取消注冊,如果采用這種方式注冊,當Context對象被銷毀時,該BroadcastReceiver也就不復存在了。

3)Context Provider組件

Context Provider和其它的應用程序組件有很大的不用,Context Provider主要用於不用的應用程序之間進行數據共享。在Android平台下,每個應用程序都有獨立的內存空間,如果某個應用程序需要使用其它應用程序的數據,就必須采用ContextProvider對象。

每個ContextProvider都繼承自Android.context包下的ContextProvider類,其功能就是提供自己的數據給外部應用程序使用,提供的數據可以存儲為Android文件、SQLite數據庫文件或其他合法的格式。

ContextProvider提供數據及訪問數據的接口,真正訪問數據的是ContextResolver對象,該對象可以與ContextProvider對象進行通信,以達到共享數據的目的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved