Android應(yīng)用基礎(chǔ)知識

應(yīng)用基礎(chǔ)知識

  • Android操作系統(tǒng)是一種多用戶Linux系統(tǒng),其中的每個Android 操作系統(tǒng)是一種多用戶 Linux 系統(tǒng),其中的每個應(yīng)用都是一個不同的用戶;
  • 默認情況下,系統(tǒng)會為每個應(yīng)用分配一個唯一的 Linux 用戶 ID(該 ID 僅由系統(tǒng)使用,應(yīng)用并不知曉)。系統(tǒng)為應(yīng)用中的所有文件設(shè)置權(quán)限,使得只有分配給該應(yīng)用的用戶 ID 才能訪問這些文件;
  • 每個進程都具有自己的虛擬機 (VM),因此應(yīng)用代碼是在與其他應(yīng)用隔離的環(huán)境中運行;
  • 默認情況下,每個應(yīng)用都在其自己的 Linux 進程內(nèi)運行。Android 會在需要執(zhí)行任何應(yīng)用組件時啟動該進程,然后在不再需要該進程或系統(tǒng)必須為其他應(yīng)用恢復(fù)內(nèi)存時關(guān)閉該進程。

共享數(shù)據(jù)和訪問系統(tǒng)服務(wù)

  • 可以安排兩個應(yīng)用共享同一 Linux 用戶 ID,在這種情況下,它們能夠相互訪問彼此的文件。 為了節(jié)省系統(tǒng)資源,可以安排具有相同用戶 ID 的應(yīng)用在同一 Linux 進程中運行,并共享同一 VM(應(yīng)用還必須使用相同的證書簽署)。
  • 應(yīng)用可以請求訪問設(shè)備數(shù)據(jù)(如用戶的聯(lián)系人、短信、可裝載存儲裝置 [SD 卡]、相機、藍牙等)的權(quán)限。

應(yīng)用組件

  • Activity 標識具有用戶界面的單一屏幕
  • Service 一種在后臺運行的組件,用于執(zhí)行長時間運行的操作或為遠程進程執(zhí)行作業(yè),不提供用戶界面,不會阻斷Acitivity與用戶的交互
  • ContentProvider 管理一組共享的應(yīng)用數(shù)據(jù),其他應(yīng)用可以通過ContentProvider對數(shù)據(jù)進行讀寫操作
  • BroadcastReceiver 響應(yīng)系統(tǒng)范圍廣播通知的組件,不會顯示用戶界面,可以創(chuàng)建通知欄通知。更常見的用戶只是作為通向其他組件的“通道”。
  • 任何應(yīng)用都可以啟動其他應(yīng)用的組件
  • Android應(yīng)用沒有單一的入口點(沒有main函數(shù))
  • 除了ContentProvider之外的三大組件通過Intent啟動,ContentProvider是在成為ContentResolver的請求目標時啟動

Manifest

  • 四大組件只有BroadcastReceiver可以無需注冊而動態(tài)創(chuàng)建
  • Manifest可以描述托管應(yīng)用組件的進程
  • 只有<manifest>和<application>元素是必須的,它們必須有且只有一個;而且<application>必須是<manifest>元素內(nèi)最后一個元
  • 顯式命名目標組件的intent將直接激活該組件,因此這種情況下的目標組件的<intent-filter>不起作用
  • <permission>標簽是聲明他人調(diào)用本應(yīng)用所需的權(quán)限,<uses-permission>是本應(yīng)用運行需要向外部請求的權(quán)限

應(yīng)用資源

  • 資源應(yīng)該“外部化”——將圖片和代碼中的字符串放到特定的資源目錄,方便系統(tǒng)根據(jù)不同的設(shè)備配置和語言環(huán)境選擇正確的資源
  • 切勿將資源文件直接保存在res/目錄內(nèi),否則會出現(xiàn)編譯錯誤
  • 資源的可以通過資源配置限定符來對文件夾進行命名以便根據(jù)配置動態(tài)選擇不同配置下的資源
  • 單組資源可以指定多個限定符,通過短劃線分隔,如drawable-en-rUS-land

處理運行時變更

  • 設(shè)備配置在運行時發(fā)生變化會觸發(fā)Activity的銷毀和重建,目的是通過新配置匹配相應(yīng)的資源
  • 重啟Activity并恢復(fù)大量數(shù)據(jù)代價高,體驗差,有兩個選擇
    • 在配置變更期間保留對象(通過保留Fragment)
    • 自行處理配置變更(manifest中配置configChanges,此后在配置變化時不會自動重啟,而是調(diào)用onConfigurationChanged(Configuration newConfig),在此回調(diào)中自己處理)

本地化

  • 如果命中了缺省配置,但缺省資源文件中不包含所需的資源(如字符串),會有運行時報錯并FC
  • 如果多套資源都被配置命中,會優(yōu)先選擇locale(有如下例外),如res/drawable-ja/優(yōu)先于res/drawable-small-land-stylus/

    Exception: The only qualifiers that take precedence over locale in the selection process are MCC and MNC (mobile country code and mobile network code

  • 管理本地化字符串
    • 把所有字符串都放到string.xml中,避免硬編碼

應(yīng)用權(quán)限

  • 通過<uses-permission獲取>,權(quán)限有兩類:normal(不會對用戶隱私和設(shè)備控制產(chǎn)生影響的)和dangerous,normal會在程序安裝時由系統(tǒng)自動授予,dangerous會彈出請求窗
  • 在Android6.0以上版本,dangerous權(quán)限都需要手動喚起請求窗來請求獲得
  • 組件可以通過android:permission聲明所需權(quán)限,這樣在調(diào)起組件的時候會檢查調(diào)用者是否有對應(yīng)的權(quán)限
  • 權(quán)限組,如果應(yīng)用已經(jīng)有權(quán)限組中的一個dangerous權(quán)限,那么在應(yīng)用請求統(tǒng)一權(quán)限組的另一個dangerous權(quán)限的時候不需要用戶授權(quán),直接可以獲得
  • 可以通過Intent來減少權(quán)限請求,例如拍照,可以通過系統(tǒng)intent讓其他應(yīng)用來完成而無需請求系統(tǒng)權(quán)限
  • 系統(tǒng)不允許不同的package聲明同名的permission,除非這些packages是同一個證書簽名
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容