android:installLocation簡析
http://www.cnblogs.com/Lefter/archive/2012/03/07/2383962.html
在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通過設定該屬性可以使得開發者以及使用者決定程式的安裝位置.
android:installLocation隸屬於AndroidManifest.XML中的manifest節點.如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
</manifest>
android:installLocation可以設定為"auto"、"internalOnly"、"preferExternal"三個值中的任何一個.
auto:程式可能被安裝在外部儲存介質上(例如:SD Card),但是預設會被安裝到手機記憶體中.當手機記憶體為空時,程式將被安裝到外部儲存介質上.當程式安裝到手機上後,使用者 可以決定把程式放在外部儲介質還是記憶體中.
internalOnly:預設值.當設定為該值時,程式只能被安裝在記憶體中,如果記憶體為空,則程式將不能成功安裝.
preferExternal:將程式安裝在外部儲存介質上,但是系統不保證程式一定會被安裝到外部儲存介質上.當外部儲存介質不可以或空時,程式將被安裝到記憶體中.程式使用了for ward-locking機制時也將被安裝到記憶體中,因為外部儲存不支援此機制.程式安裝後,使用者可以自由切換程式應該在外部還是內部儲存介質上.
注意:當程式使用了Google Play的Copy Protection特性時,只能安裝到記憶體中.
當程式被安裝到外部儲存介質時,
① .apk檔案將被移動到外部儲存介質上,但是程式的資料仍然會在記憶體中
② 儲存.apk檔案的容器將會使用一個隨機生成的金鑰進行加密,這樣只有安裝該程式的設定可以使用存在外部儲存介質上的資料.
警告:當外部儲存介質被解除安裝時,安裝在該外部儲存介質上的程式將立刻被終止掉!
向後相容性:
宣告瞭android:installLocation,但android:minSdkVersion小於8時,我們使用不低於Froyo的AVD進行編譯,這樣在低於Froyo的系統中android:installLocation將被忽略,而不低於Fro yo的系統中將使用我們指定的android:installLocation.
當我們的程式具有如下行為時我們不應該將程式安裝到外部儲存介質上
①Service
正在執行的服務將被終止,當外部儲存介質被重新載入時服務不會被重啟.
②Alarm Service
鬧鐘服務將被取消,開發者必須在外部儲存介質重新載入後重新註冊鬧鐘服務.
③Input Method Engines
輸入法將被換成系統輸入法,當外部儲存介質被重新載入後使用者可以通過系統設定來啟動我們的輸入法
④Live Wallpapers
我們的動態桌布將被替換為預設的動態桌布.外部儲存介質過載後,使用者可以更換回來.
⑤Live Folders
我們的動態資料夾將被移出.
⑥App Widgets
我們的小部件將被移出,通常只有系統重啟後我們的小部件才可用.
⑦Account Managers
使用AccountManager建立的賬戶將會消失,直至儲存介質被重新載入.
⑧Sync Adapters
只有外部儲存介質被重新載入時,我們的同步功能才可用
⑨Device Administrators
我們的DeviceAdminReceiver將會失效
⑩監聽開機結束事件
系統會在載入外部儲存介質之前傳送ACTION_BOOT_COMPLETED廣播.因此安裝在外部儲存介質的程式將不能接受開機廣播.
通常,只要我們沒有使用上述的特性,我們就可以將我們的程式安裝到外部儲存介質上.例如,大的遊戲程式.當我們的APK檔案有幾M大時我們應該認真的考慮是否要將程式移動到外部儲存介質上以幫助使用者節省記憶體.
相關文章
- android:descendantFocusability用法簡析Android
- Android Handler與Looper原理簡析AndroidOOP
- Android中mmap原理及應用簡析Android
- Android 流暢度檢測原理簡析Android
- MongoDB 簡析MongoDB
- KafkaBroker 簡析Kafka
- KafkaProducer 簡析Kafka
- BootAnimation簡析boot
- Android 11(R) Power HAL AIDL簡析 -- 基本介面AndroidAI
- Android 啟動過程簡析(一)之 init 程式Android
- EditText無法獲取焦點(android:descendantFocusability用法簡析 )Android
- android Activity的啟動模式 作用簡析+demo詳解Android模式
- ObjC RunLoop簡析OBJOOP
- CGLib 簡析CGLib
- Flux模式簡析UX模式
- 跨域簡析跨域
- 簡析HTTPSHTTP
- Android V1及V2簽名原理簡析Android
- Android 3G/4G流量上網原理簡析Android
- Android的IPC機制(二)——AIDL實現原理簡析AndroidAI
- Android的IPC機制(七)—— Socket的原理簡析與使用Android
- Android框架淺析Android框架
- vuex 原始碼簡析Vue原始碼
- Entitas實現簡析
- ObjC Runtime簡析OBJ
- Flutter渲染流程簡析Flutter
- ObjC block簡析(一)OBJBloC
- JavaScript 模組化簡析JavaScript
- YARN基本介面簡析Yarn
- Android -- 多媒體播放之MediaPlayer使用內部實現簡析Android
- Android記憶體測試方法梳理和實現原理簡析Android記憶體
- Android開發之道(10)Handler本質簡析與使用例項Android
- Android 12(S) 影像顯示系統 - drm_hwcomposer 簡析(上)Android
- Android 12(S) 影像顯示系統 - drm_hwcomposer 簡析(下)Android
- ObjC中KVO原理簡析OBJ
- 簡析限流演算法演算法
- 網站改造方向簡析網站
- Flutter啟動流程簡析Flutter