应用程序安装在sd卡还是内存选择及设置
點擊打開鏈接
主要內容是介紹如何使得自己開發的android程序安裝到外置儲存設備(如sd卡),安裝到外置儲存設備(如sd卡)的程序有哪些特別的地方、兼容性、哪些軟件最好安裝在內存中,哪些最好安裝在外設上。
?
下面一段是個人廢話,可忽略。。
Xml代碼???
1、 設置android程序安裝到外置儲存設備(如sd卡)還是內存
從android api level 8(即andrid 2.2)后,允許將應用程序安裝到外置儲存設備(如sd卡)中,通過AndroidManifest.xml文件中manifest的android:installLocation屬性設置:
Java代碼??此屬性可以有preferExternal、auto、internalOnly,可選。
preferExternal表示首選安裝到外置儲存設備(如sd卡)中,如果外設空間不足,則安裝到內存中。可以將程序在外設和內存中進行移動
auto表示由系統根據若干因素自動選擇將程序安裝在外置儲存設備還是內存中,可以將程序在外設和內存中進行移動。
internalOnly表示強制安裝在內存中,通常用于一些含有必須安裝在內存中特性的應用程序,見4的介紹
如果沒有此屬性表示安裝到設備(如手機)內存中,并且不可移動至外設存儲中。
?
2、安裝到外置儲存設備中的程序
若某程序被安裝到外置儲存設備中,則
(1)當外置儲存設備(如sd卡)掛載在手機等設備上時,對應用程序的運行沒有什么影響。
(2)apk文件保存在外設上,但是程序的所有私有數據,如數據庫、優化后的.dex文件、提取出來的本地代碼仍然保存在內存中。
(3)應用程序會被用隨機生成的key加密后保存在外設上,只有原來安裝該程序的設備(如手機)才能進行解密。所以說安裝在外設上的程序只能被唯一的設備使用。
(4)用戶可以通過系統設置將該程序移動到內存中。
(5)當外設從設備上卸載時,所有安裝在外設上的應用程序被kill
?
3、向后兼容性
開頭就介紹了從android api level 8(即andrid 2.2)后,允許將應用程序安裝到外置儲存設備(如sd卡)中。
對api 8之前編譯的程序只能安裝在內存中,就算安裝在api 8及以上的平臺上也無法在外設和內存中移動
如果希望擁有android:installLocation屬性的程序能夠在api 8以下的平臺上運行,需要:
(1)在AndroidManifest.xml文件中manifest元素設置android:installLocation屬性
(2)設置android:minSdkVersion,其值可以小于8。并且確保應用程序使用的api和該級別兼容
(3)在android api level 8編譯程序,因為低級別的無法識別android:installLocation屬性
這樣當在api 8以下的平臺上android:installLocation屬性被忽略,程序安裝在內存中
AndroidManifest.xml
?
4、哪些軟件最好安裝在內存中
當外設從設備上卸載時,所有安裝在外設上的應用程序被kill,并且直到外設可用時,系統才能識別該應用程序。除了kill程序外,對于某些程序可能會產生更嚴重的后果,為了讓你的程序始終運行在可預料情況下,當程序包含以下特性時,最好安裝在內存中:
(1)Services(服務)
在外設卸載時,運行的服務會被kill,并且當外設可用時不會重新啟動,除非注冊ACTION_EXTERNAL_APPLICATIONS_AVAILABLE廣播intent,這樣可以在外設可用時重啟服務
(2)Alarm Services(定時服務)
在AlarmManager注冊的Alarm會被取消,必須在設備可用時手動重啟
(3)Input Method Engines(輸入法)
在外設卸載時,安裝在外設上的輸入法不可用,系統會采用默認的IME。當外設可用時,系統必須重新啟動該輸入法
好吧,怪不得找不到一個可以安裝到sd卡的輸入法了。。
(4)Live Wallpapers(壁紙)
在外設卸載時,安裝在外設上的Live Wallpapers不可用,系統會采用默認的Live Wallpapers。
(5)Live Folders(home的文件夾)
在外設卸載時,安裝在外設上的Live?Folders不可用,系統會采用默認的Live?Folders。
好吧,怪不得htc默認的壁紙和工具不可移動了
(6)App Widgets(應用的Widgets)
在外設卸載時,安裝在外設上的App Widgets不可用。通常直到系統重啟方可用(或系統設置home應用程序)
(7)Account Managers
AccountManager創建的Account不可用直到外設可用
(8)Sync Adapters
AbstractThreadedSyncAdapter和所有其同步函數不可用直到外設可用
(9)Device Administrators
DeviceAdminReceiver和它所有的管理功能不可用
(10)Broadcast Receivers listening for "boot completed"
系統在外設掛載前,發出ACTION_BOOT_COMPLETED(系統啟動完畢)廣播,所以安裝在外設上的程序收不到該廣播
(11)Copy Protection
如果使用了Android Market's Copy Protection屬性,則不可以安裝在外設上。如果使用?Android Market's?Application Licensing,則可以任意安裝在外設還是內存內
?
5、哪些軟件最好安裝在外設中
畢竟內存有限,所以如果不包含4中所介紹屬性最好安裝在外設中。通常像apk文件較大的程序,游戲程序。
?
參考:
http://developer.android.com/guide/appendix/install-location.html
http://www.cnblogs.com/wisekingokok/archive/2011/08/26/2154505.html
總結
以上是生活随笔為你收集整理的应用程序安装在sd卡还是内存选择及设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7下安装和配置MySQL5.
- 下一篇: 硬件基础:嵌入式软件可靠性设计要注意的问