Android應用解析

Activity :

活動是最基本的Android 應用程序組件,應用程序中,一個活動通常就是一個單獨的屏幕。每一個活動都被實現爲一個獨立的類,並且從活動基類中繼承而來,活動類將會顯示由視圖控件組成的用戶接口,並對事件做出響應。大多數的應用是由多個屏幕顯示組成。例如:一個文本信息的應用也許有一個顯示發送消息的聯繫人列表屏幕,第二個屏幕用來寫文本消息和選擇收件人,再來一個屏幕查看消息歷史或者消息設置操作等。這裏每一個這樣的屏幕就是一個活動,很容易實現從一個屏幕到一個新的屏幕並且完成新的活動。在某些情況下當前的屏幕也許需要向上一個屏幕活動提供返回值--比如讓用戶從手機中挑選一張照片返回通訊錄做爲電話撥入者的頭像。

當一個新的屏幕打開後,前一個屏幕將會暫停,並保存在歷史堆棧中。用戶可以返回到歷史堆棧中的前一個屏幕。當屏幕不再使用時,還可以從歷史堆棧中刪除。默認情況下,Android 將會保留從主屏幕到每一個應用的運行屏幕。

簡單理解Activity 代表一個用戶所能看到的屏幕,Activity 主要是處理一個應用的整體性工作,例如,監聽系統事件(按鍵事件、觸摸屏事件等)、爲用戶顯示指定的View,啓動其他Activity 等。所有應用的Activity都繼承android.app.Activity 類,該類是Android 提供的基層類,其他的Activity 繼承該父類後,通過Override
父類的方法來實現各種功能,這種設計在其他領域也較爲常見。

Intent :


調用Android 專有類Intent 進行架構屏幕之間的切換。Intent 是描述應用想要做什麼。Intent 數據結構兩個最重要的部分是動作和動作對應的數據。典型的動作類型有:MAIN(活動的門戶)、VIEW、PICK、EDIT等。而動作對應的數據則以URI 的形式進行表示。例如:要查看某個人的聯繫方式,你需要創建一個動作類
型爲VIEW 的Intent,以及一個表示這個人的URI。

Android 使用了Intent 這個特殊類,實現在屏幕與屏幕之間移動。Intent 類用於描述一個應用將會做什麼事。在Intent 的描述結構中,有兩個最重要的部分:動作和動作對應的數據。典型的動作類型有:M AIN(activity的門戶)、VIEW、PICK、EDIT 等。而動作對應的數據則以URI 的形式進行表示。例如:要查看一個人的聯繫方式,你需要創建一個動作類型爲VIEW 的intent,以及一個表示這個人的URI。

與之有關係的一個類叫IntentFilter。相對於intent 是一個有效的做某事的請求,一個intentfilter 則用於描述一個activity(或者IntentReceiver)能夠操作哪些intent。一個activity 如果要顯示一個人的聯繫方式時,需要聲明一個IntentFilter,這個IntentFilter 要知道怎麼去處理VIEW 動作和表示一個人的URI。IntentFilter 需要在AndroidManifest.xml 中定義。

通過解析各種intent,從一個屏幕導航到另一個屏幕是很簡單的。當向前導航時,activity 將會調用startActivity(IntentmyIntent)方法。然後,系統會在所有安裝的應用程序中定義的IntentFilter 中查找,找到最匹配myIntent 的Intent 對應的activity。新的activity 接收到myIntent 的通知後,開始運行。當startActivity 方法被調用將觸發解析myIntent 的動作,這個機制提供了兩個關鍵好處:
A、Activities 能夠重複利用從其它組件中以Intent 的形式產生的一個請求;
B、Activities 可以在任何時候被一個具有相同IntentFilter 的新的Activity 取代。

IntentReceiver:


當你希望你的應用能夠對一個外部的事件(如當電話呼入時,或者數據網絡可用時,或者到了晚上時)做出響應,你可以使用一個IntentReceiver。雖IntentReceiver 在感興趣的事件發生時,會使用NotificationManager通知用戶,但它並不能生成一個UI。IntentReceiver 在AndroidManifest.xml 中註冊,但也可以在代碼中使用Context.registerReceiver()進行註冊。當一個intentreceiver 被觸時,你的應用不必對請求調用intentreceiver,系統會在需要的時候啓動你的應用。各種應用還可以通過使用Context.broadcastIntent()將它們自己的
intentreceiver 廣播給其它應用程序。

Service :


一個Service 是一段長生命週期的,沒有用戶界面的程序。比較好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個activity,讓使用者可以選擇歌曲並播放歌曲。然而,音樂重放這個功能並沒有對應的activity,因爲使用者當然會認爲在導航到其它屏幕時音樂應該還在播放的。在這個例子中,媒體播放器這個activity 會使Context.startService()來啓動一個service,從而可以在後臺保持音樂的播放。同時,系統也將保持這個service 一直執行,直到這個service 運行結束。另外,我們還可以通過使用Context.bindService()方法,連接到一個service 上(如果這個service 還沒有運行將啓動它)。當連接到一個service 之後,我們還可以service 提供的接口與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。

Content Provider :

Android 應用程序能夠將它們的數據保存到文件、SQLite 數據庫中,甚至是任何有效的設備中。當你想將你的應用數據與其它的應用共享時,內容提供器就可以發揮作用了。因爲內容提供器類實現了一組標準的方法,從而能夠讓其它的應用保存或讀取此內容提供器處理的各種數據類型。

數據是應用的核心。在Android 中,默認使用鼎鼎大名的SQLite 作爲系統DB。但是在Android 中,使用方法有點小小的不一樣。在Android 中每一個應用都運行在各自的進程中,當你的應用需要訪問其他應用的數據時,也就需要數據在不同的虛擬機之間傳遞,這樣的情況操作起來可能有些困難(正常情況下,你不能讀取其他的應用的db 文件),ContentProvider 正是用來解決在不同的應用包之間共享數據的工具。

- 所有被一個Android 應用程序創建的偏好設置,文件和數據庫都是私有的。
- 爲了和其他應用程序共享數據,應用程序不得不創建一個Content Provider
- 要回索其他應用程序的數據,它自己的Content Provider 必須被調用
- Android 本地Content Provider 包括:
       CallLog:地址和接收到的電話信息
       Contact.People.Phones:存儲電話號碼
       Setting.System:系統設置和偏好設置
       等等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章