摘 要:Android是基于Linux開放性內核的操作系統,是Google公司在2007年11月5日公布的手機操作系統。Android作為Google移動互聯網戰略的重要組成部分,將進一步推進“隨時隨地為每個人提供信息”這一企業目標的實現。Google的目標是讓移動通信不依賴于設備,甚至是平臺。出于這個目的,Android將完善而不是替代Google長期以來推行的移動發展戰略:通過與全球各地的手機制造商和移動運營商成為合作伙伴,開發既實用又有吸引力的移動服務,并推廣這些產品。
關鍵詞:保存方式 數據共享 文件
中圖分類號:TP2\t\t\t文獻標識碼:A\t\t\t文章編號:1672-3791(2011)10(a)-0010-01
1 Android數據共享
數據是應用的核心,但是在Android中,每一個應用都運行在各自的進程中,當一個應用需要訪問其他應用的數據時,也就是數據需要在不同的虛擬機之間傳遞,這樣的情況操作起來可能有些困難—— 在正常情況下,不能讀取其他應用的數據。
那么Android是如何實現應用程序之間數據共享的?一個應用程序可以通過一套標準及統一的接口將自己的數據暴露出去,而外界可以通過這一套標準及統一的接口和這個程序里的數據打交道。
2 通過Intent實現數據共享
Android為了屏蔽進程的概念,利用不同的組件(Activity、Service)來表示進程之間的通信。組件間通信的核心機制是Intent,通過Intent可以開啟一個Activity或Service,而不論這個Activity或Service是屬于當前應用還是其它應用的。
Intent包含兩部分。
(1)動作(action)—— 要執行的動作,即要轉移的組件。
(2)內容(category、data)——要傳遞的數據,即要共享的數據。
Intent類型。
(1)顯式—— 直接指定消息目的地,只適合同一進程內的不同組件之間通信。
new Intent(this,Target.class)
2)隱式—— 需要在AndroidMainifest.xml中注冊,一般用于跨進程通信。
new Intent(String action)
有了Intent這種基于消息的進程內或進程間通信模型,我們就可以通過Intent去開啟一個Service,也可以通過Intent跳轉到另一個Activity,不論上面的Service或Activity是在當前進程還是其它進程內的,即不論Service或Activity是當前應用還是其它應用的,通過消息機制都可以進行通信,實現數據共享。但是通過消息機制實現的進程間通信,有一個弊端就是,如果我們的Activity與Service之間的交往不是簡單的Activity開啟Service操作,而是要隨時發一些控制請求,那么必須就要保證Activity在Service的運行過程中隨時可以連接到Service。
3 通過SharedPreferes實現
SharedPreferes是一種輕量級的數據保存方式。通過SharedPreferes可以將NVP(Name/Value Pair,名值對)保存在Android的文件系統中,而且SharedPreferes完全屏蔽的對文件系統的操作過程,開發人員僅是通過調用SharedPreferes對NVP進行保存和讀取的。另外,SharedPreferes多用于保存軟件配置參數,它主要是現實小數據的存儲與恢復顯示狀態。其背后是用xml文件存放數據,文件存放在/data/data/
SharedPreferes支持三種訪問模式。
(1)私有(MODE_PRIVATE):僅有創建程序有權對其進行讀取或寫入。
(2)全局讀(MODE_WORLD_READABLE):不僅創建程序可以對其進行讀取或寫入,其他應用程序也有讀取操作的權限,但沒有寫入的權限。
(3)全局寫(MODE_WORLD_WRITEABLE):創建程序和其他程序都可以對其進行寫入操作,但其他程序沒有讀取的權限。
SharedPreferes的使用方法。
(1)保存數據。
①通過上下文對象獲得一個Shared Preferences對象。
②利用得到SharedPreferences對象獲得一個Edit對象,使用Edit對象實現對簡單數據的保存,注意要記得Edit的commit方法。
(2)獲取數據。
①通過上下文對象獲得一個Shared Preferences對象。
②使用SharedPreferences對象的get方法獲取數據。
4 Content Provider
在實際的應用中,每個應用都可以創建自己的數據,但是這個數據對其他應用來說是不可見的,當某個應用需要將自己的數據共享給其他應用使用時,我們就需要使用到內容提供者ContentProvider,使用ContentProvider去訪問某個應用程序的數據,讓我們不必關心某個應用程序的數據存儲方式。如果一個程序想讓其他程序操作自己的數據就必須定義自己的ContentProvider然后再清單文件中進行注冊,其他應用程序就可以根據ContentProvider定義的Uri對某一應用程序的數據進行操作。
android中的電話本等數據就是通過ContentProvider實現數據共享的,系統中有很多已經存在的共享Uri。我們可以使用ContentResolver通過Uri來操作不同表的數據;如Contacts.People.CONTENT_URI。
定義和使用自己的ContentProvider需要以下三步。
第一步,定義自己的ContentProvider,必須繼承ContentProvider,根據業務的需要實現相應的方法。要注意的是,我們自己定義的ContentProvider要提供對數據操作的入口(Content Provider可以對數據庫進行操作當然,也可以對文件類型的數據進行操作)。
第二步,在項目Manifest.xml文件中配置我們自定義的ContentProvider。
第三步,在其他應用中使用ContentResolver對ContentProvider進行訪問(實際上ContentRe solver對象簽名方法在內部最終是根據傳入的Uri拿到對應的ContentProvider對象,實現對數據的操作)。
總之,通過以上幾種方式,Android的應用程序間可以實現數據共享。另外,Android在數據共享的安全方面有一個統一、完備和輕便的安全策略模型,即權限設置。我們可以定義自己permission,然后在需要的組件處設置該permission,那么用戶要想該使用組件的數據時,就必須要配置該permission,否則訪問就會失敗。