天天看點

aapt 工具 | Android 應用程式的開發語言

作者:願天堂沒有代碼

引言

Android 應用程式使用Java做為開發語言。aapt工具把編譯後的Java代碼連同其它應用程式需要的資料和資源檔案一起打包到一個Android封包件中,這個檔案使用.apk做為擴充名,它是分發應用程式并安裝到移動裝置的媒介,使用者隻需下載下傳并安裝此檔案到他們的裝置。單一.apk檔案中的所有代碼被認為是一個應用程式。
aapt 工具 | Android 應用程式的開發語言

從很多方面來看,每個Android應用程式都存在于它自己的世界之中:

  • 預設情況下,每個應用程式均運作于它自己的Linux程序中。當應用程式中的任意代碼開始執行時,Android啟動一個程序,而當不再需要此程序而其它應用程式又需要系統資源時,則關閉這個程序。
  • 每個程序都運作于自己的Java虛拟機(VM)中。是以應用程式代碼實際上與其它應用程式的代碼是隔絕的。
  • 預設情況下,每個應用程式均被賦予一個唯一的Linux使用者ID,并加以權限設定,使得應用程式的檔案僅對這個使用者、這個應用程式可見。當然,也有其它的方法使得這些檔案同樣能為别的應用程式所通路。

使兩個應用程式共有同一個使用者ID是可行的,這種情況下他們可以看到彼此的檔案。從系統資源維護的角度來看,擁有同一個ID的應用程式也将在運作時使用同一個Linux程序,以及同一個虛拟機。

應用程式元件

Android的核心功能之一就是一個應用程式可以使用其它應用程式的元素(如果那個應用程式允許的話)。比如說,如果你的應用程式需要一個圖檔卷動清單,而另一個應用程式已經開發了一個合用的而又允許别人使用的話,你可以直接調用那個卷動清單來完成工作,而不用自己再開發一個。你的應用程式并沒有吸納或連結其它應用程式的代碼,它隻是在有需求的時候啟動了其它應用程式的那個功能部分。

為達到這個目的,系統必須在一個應用程式的一部分被需要時啟動這個應用程式,并将那個部分的Java對象執行個體化。與在其它系統上的應用程式不同,Android應用程式沒有為應用準備一個單獨的程式入口(比如說,沒有main()方法), 而是為系統依照需求執行個體化提供了基本的元件。共有四種元件類型:

Activity

Activity**是為使用者操作而展示的可視化使用者界面。比如說,一個activity可以展示一個菜單項清單供使用者選擇,或者顯示一些包含說明的照片。一個短消息應用程式可以包括一個用于顯示做為發送對象的聯系人的清單的activity,一個給標明的聯系人寫短信的activity以及翻閱以前的短信和改變設定的activity。盡管它們一起組成了一個内聚的使用者界面,但其中每個activity都與其它的保持獨立。每個都是以Activity類為基類的子類實作。

一個應用程式可以隻有一個activity,或者,如剛才提到的短信應用程式那樣,包含很多個。每個activity的作用,以及其數目,自然取決于應用程式及其設計。一般情況下,總有一個應用程式被标記為使用者在應用程式啟動的時候第一個看到的。從一個activity轉向另一個的方式是靠目前的activity啟動下一個。

每個activity都被給予一個預設的視窗以進行繪制。一般情況下,這個視窗是滿屏的,但它也可以是一個小的位于其它視窗之上的浮動視窗。一個activity也可以使用超過一個的視窗──比如,在activity運作過程中彈出的一個供使用者反應的小對話框,或是當使用者選擇了螢幕上特定項目後顯示的必要資訊。

視窗顯示的可視内容是由一系列視圖構成的,這些視圖均繼承自 View 基類。每個視圖均控制着視窗中一塊特定的矩形空間。父級視圖包含并組織它子視圖的布局。葉節點視圖(位于視圖層次最底端)在它們控制的矩形中進行繪制,并對使用者對其直接操作做出響應。是以,視圖是activity與使用者進行互動的界面。比如說,視圖可以顯示一個小圖檔,并在使用者指點它的時候産生動作。Android有很多既定的視圖供使用者直接使用,包括按鈕、文本域、卷軸、菜單項、複選框等等。

視圖層次是由Activity.setContentView()方法放入activity的視窗之中的。上下文視圖是位于視圖層次根位置的視圖對象。

服務

服務沒有可視化的使用者界面,而是在一段時間内在背景運作。比如說,一個服務可以在使用者做其它事情的時候在背景播放背景音樂、從網絡上擷取一些資料或者計算一些東西并提供給需要這個運算結果的activity使用。每個服務都繼承自Service]基類。

一個媒體播放器播放播放清單中的曲目是一個不錯的例子。播放器應用程式可能有一個或多個activity來給使用者選擇歌曲并進行播放。然而,音樂播放這個任務本身不應該為任何activity所處理,因為使用者期望在他們離開播放器應用程式而開始做别的事情時,音樂仍在繼續播放。為達到這個目的,媒體播放器activity應該啟用一個運作于背景的服務。而系統将在這個activity不再顯示于螢幕之後,仍維持音樂播放服務的運作。

你可以連接配接至(綁定)一個正在運作的服務(如果服務沒有運作,則啟動之)。連接配接之後,你可以通過那個服務暴露出來的接口與服務進行通訊。對于音樂服務來說,這個接口可以允許使用者暫停、回退、停止以及重新開始播放。

如同activity和其它元件一樣,服務運作于應用程式程序的主線程内。是以它不會對其它元件或使用者界面有任何幹擾,它們一般會派生一個新線程來進行一些耗時任務(比如音樂回放)

廣播接收器

廣播接收器是一個專注于接收廣播通知資訊,并做出對應處理的元件。很多廣播是源自于系統代碼的──比如,通知時區改變、電池電量低、拍攝了一張照片或者使用者改變了語言選項。應用程式也可以進行廣播──比如說,通知其它應用程式一些資料下載下傳完成并處于可用狀态。

應用程式可以擁有任意數量的廣播接收器以對所有它感興趣的通知資訊予以響應。所有的接收器均繼承自BroadcastReceiver基類。 廣播接收器沒有使用者界面。然而,它們可以啟動一個activity來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀态欄上放一個持久的圖示,使用者可以打開它并擷取消息。

内容提供者

内容提供者将一些特定的應用程式資料供給其它應用程式使用。資料可以存儲于檔案系統、SQLite資料庫或其它方式。内容提供者繼承于ContentProvider基類,為其它應用程式取用和存儲它管理的資料實作了一套标準方法。然而,應用程式并不直接調用這些方法,而是使用一個 ContentResolver對象,調用它的方法作為替代。ContentResolver可以與任意内容提供者進行會話,與其合作來對所有相關互動通訊進行管理。

每當出現一個需要被特定元件處理的請求時,Android會確定那個元件的應用程式程序處于運作狀态,或在必要的時候啟動它。并確定那個相應元件的執行個體的存在,必要時會建立那個執行個體。

最後這裡放上我耗時兩個月,将自己8年 Android 開發的知識筆記整理成了一份系統學習資料筆記,技術相關的知識點在筆記中都有詳細的解讀并且把每個技術點整理成了 PDF 文檔(知識脈絡 + 諸多細節)有需要的小夥伴:可以私信發送"筆記"就可以免費領取了

aapt 工具 | Android 應用程式的開發語言
aapt 工具 | Android 應用程式的開發語言

好了,以上就是今天要分享的内容,大家覺得有用的話,可以點贊分享一下;如果文章中有什麼問題歡迎大家指正;歡迎在評論區或背景讨論哈~

繼續閱讀