1. 程式人生 > >mono for android學習過程系列教程(3)

mono for android學習過程系列教程(3)

服務

接著上一講的內容,咱們繼續來嘮叨概念性的東西。服務,內容提供器,廣播接收器等理論知識。

首先是服務,它不是一個視覺化的元件或者檢視。他是由我們開發人員來定義,可以一直一直執行

的工作單元。跟活動的差別在於:它沒有視覺化元件,它的執行不會依賴於應用程式使用者。

服務用來做什麼的呢?我們第一反應應該會是這個;讓我們慢慢來解開她的衣服探索一下。

我們平時聽歌的時候,玩手機QQ。或者UC在下載的時候,下載完成之後會有一個提示。這樣類似的

種種任務都可以作為一個服務來執行。它是我們看不到的,比較抽象,但是在平時的手機應用程式中

我們卻經常可以感受到它的身影,再舉個例子,比如鬧鐘到點了自動會觸發手機音樂響起。這也是服務

的一種使用。服務也可以在我個人理解來看相當於一種定時任務一樣一樣的。

服務在另一種理解上看,它的作用可以將它想象成一個後臺服務。他不能和其他的應用程式元件相比。

換句話說,服務就是安卓的主要勞動力。通過使用服務,比如有的任務需要請求資源,請求網路,服務

就可以來將任務進行排隊。服務同時也是對其他應用程式公開任務的一種方法,方便這些應用程式可以跟

特定的工作進行互動。服務也是處理一個重複或者正在進行的任務非常好的辦法。典型的有傳送郵件程式等。

服務的使用一定要另外申明一個執行緒,不要使用主執行緒,使得畫面不夠流暢。以後在繼續深入服務。

內容提供器

接下來講內容提供器。

首先,他是很多程式共享資料首要選取的方法。可以把它認為一種大家一起使用的公共的資料儲存型別。它可以

讓開發人員公開一些需要被查詢的資料或者被一些程式使用特定的資料集。安卓程式沒有很好的資料儲存機制,因此

內容提供器是建立通用資料池很好的方法。

內容提供器所具備的靈活性可以讓開發人員針對資料的不同子集定義一個或多個數據集。它可以滿足你所指定的安全標準

的應用程式共享其他相關資料。此外,內容提供器還可以實現對每個資料集不同的操作。比如一些資料的只讀,或者

寫入資料等操作。這些資料被公開,它的優勢在於使用者可以選擇希望的應用程式來管理他們的資料,而不必一定適用本機的

應用程式。

內容提供器包括:常見的AlarmClock,Brower,CallLog,ContactsContract,MediaStore,Settings,UserDictionary.

他們分別是,提供對系統報警始終這個程式的訪問許可權,從而允許不同的應用程式設定報警時間和模式,比如振鈴等。

第二個是類似一個搜尋功能,第三個是檢視手機聯絡人資料,甚至可以修改,第四個是安卓上通用的媒體檔案程式訪問。

第五個是安卓的全域性設定功能,最後一個是使用者自定義資料單詞,並進行儲存。

在Android.Provider的命名控制元件的安卓文件中可以找到所用的預設內容提供器列表。

在我們學習內容提供器的時候,我們需要學習並記住的是它的工作方式。

不論是系統提供的還是自己建立的提供器,並不是通過直接訪問內容提供器來實現訪問的。

安卓平臺通過利用一箇中介物件來統一的當前和將來的所有訪問,而不是為訪問方法提供N個不同的內容提供器。

換種說法,ContentResolver物件是負責處理與內容提供器互動的,他是一個可以充當資料儲存的中介。這個方法

簡化了內容提供器中資料的使用,這裡可以確保內容提供器都是平等的。

這裡就有另外一種概念了,內容解析器。內容解析器需要遵守兩個基本規則。

所有的內容儲存都需要有一個唯一的URI,它提供了查詢所需要訪問的內容提供器唯一方法,這個URI還可以帶上引數

當作條件來查詢特定的資料集。

第二個規則是基類ContentProvider定義了可實現的內容提供器上執行所有的可能的操作。在自己編寫自定義提供器時,

由我們自己來定義提供器的邏輯,即確認需要寫什麼方法。這種方法的優勢在於你知道如何連結上一個提供器,那就可以

連線到任何提供器上,但是缺點在於沒有許可權編寫自己的訪問方法。不過ContentProvider具備了修補該缺點存在。

contentResolver有五個常用的五個函式。Query(),update(),insert(),delete(),getType().

第一個方法接受針對提供器URI,選擇字串,選擇引數以及結果排序順序的引數,用來返回目標結果集的指標。

update()接受針對提供器的URI,新欄位的值,以及具體更新的行過濾器的引數,返回Update()語句影響的行數。

insert()接受針對提供器的URI,選擇字串,選擇引數的引數。該函式返回新插入項的URI

delete()接受針對提供器的URI,選擇字串,選擇引數的引數。該函式返回影響的行數

getType()接受針對提供器URI的引數,該函式返回內容提供器中儲存的資料文字的MIME型別。(MIME型別就是檔案的字尾副檔名)

內容提供器主要了解他的工作方式以及記住使用的幾個函式即可,後續篇章繼續深入。

廣播接收器

接下來講最後一個廣播接收器,說的很直白點,廣播接收器就類似我們監控系統。通過監聽事件做出相應的程式元件。

廣播播放器可以對特定的事件進行監聽,如果必要,還可以在響應的時候啟動活動和服務。他跟服務有一定的相似之處。他們

沒有任何使用者介面。其次,都是用於完成任務。而不同之處在於廣播用來監聽訊息型別,並針對啟動適當的相應。

接下來介紹比較重要的概念,組建之間的通訊:安卓意圖(android意圖)

這是用來安卓應用程式元件之間的互動,通過使用意圖可以啟動新任務或者新活動來互動。

可以通過意圖來初始化一個新服務,或者對一個進行中的服務傳遞資料實現互動。

還可以通過意圖來充當訊息廣播的中介實現來進行互動。

意圖是對完成某項任務所需要的細節的抽象。一個意圖可以儲存多個資訊塊-接受對方元件執行的指令。

如果一旦接受到一個意圖,則由該接收器來確定如何相應,如何利用意圖中的資料來完成接下來的操作。

還有一個重要的概念是繫結元件,名為安卓清單。他就是類似winform裡面的aapconfig以及webform裡面的

web.config檔案。它是用來控制程式的一些許可權,或者設定唯一軟體包的名稱,最低版本的sdk。應用程式主題,

以及程式版本。

該檔案通過規定那些意圖訊息與某個程式元件繫結來描述該元件的功能。

還可以定義應用程式必須操作的其他程式碼庫。

今天的內容就到這裡了,比較枯燥無味。下一將開始將要講解一些ui控制元件。盡請期待...

轉載請附帶聯絡人Q-高卿   QQ1466358067