posts - 241,  comments - 116,  trackbacks - 0

            自從Android 2.2版本開始,Android系統引入了一個全新的功能——APP2SD,這個功能讓Android系統允許將應用程序安裝到SD卡上面,一方面節約出更多的RAM空間,另一方面也允許應用程序擴大自身的體積。

            但是僅僅Android系統支持APP2SD,這樣還是不夠的,應用程序如果不經過處理,仍然會一如既往的轉進RAM里。這是因為Android系統保持向后兼容的特性。那么,如果讓應用程序不裝入RAM,而是裝入SD卡呢?這需要在應用程序的Android清單文件manifest.xml的manifest元素里加入android:installLocation屬性。其值為:perferExtenal或auto。

              perferExtental——意味著此應用程序安裝到擴展存儲(通常就是SD卡),但是系統不能保證應用肯定會安裝到擴展存儲。如果擴展存儲沒有空間或者不可用,那么系統仍然會將應用程序安裝到RAM里。www.nvzhuangpaihangbang.com

           

              auto——意味著此應用程序可能安裝到擴展存儲,但是對安裝位置沒有特別偏好,將有系統根據自身算法,參考很多因素之后決定將此應用程序安裝到哪里。

              internalOnly——意味著此應用程序只能被安裝到RAM。

           

            一旦加入android:installLocation,不論其值為什么,用戶都可以將應用程序在RAM和SD卡之間自由移動。當應用程序安裝到SD卡后,需要注意以下幾點:

              1. 僅apk文件保存在SD卡上,其他所有用戶的私有數據、數據庫、經過優化的dex文件和釋放的原生代碼仍然保存在RAM上。

              2. SD卡里的應用程序在進行安裝時會被加密,因此安裝在SD卡上的應用程序僅對安裝這個應用程序的設備起效,在其他設備上將不能運行。

              3. 當用戶啟用USB大容量存儲以共享文件給計算機、或者卸載SD卡,那么所有安裝在SD卡上的應用都會被立即結束。

           

            由于安裝在SD卡上的應用程序會受到SD卡狀態的影響,所以為了確保應用程序的健壯性,在決定應用程序是否可以安裝在SD卡上時,應該做到以下原則:

              1. 有后臺服務(Service)的應用程序,不應該支持APP2SD上。因為Service是前臺界面不可見的,在卸載SD卡或者啟用USB時,用戶并無法知道該應用程序的Service是否處于活動狀態。所以可能造成Service的意外終止。

              2. 輸入法程序不應該支持APP2SD。如果卸載SD或者啟用USB,那么該輸入法將被終止,并由系統默認輸入法所替代。

              3. 壁紙和包含桌面小工具(Widget)等常顯于界面的應用程序不應該支持APP2SD。

              4. AccountManager等與用戶數據有關的應用程序不應該支持APP2SD,因為在SD卡正常掛載之前,程序都無法看到通過AccountManager創建的用戶。

          waiyuwu.blogcn.com

           

            如果應用程序有Service、或支持桌面小工具等以上提到的功能時,應該盡可能避免被安裝到SD卡上。一種保險的做法是指定android:installLocation的值為internalOnly。

            由于APP2SD是Android 2.2版本的新特性,如果該應用程序被計劃支持2.2之前的版本,做到向后兼容的話,那么需要進行以下步驟:

              1. 在manifest元素里加入android:installLocation屬性,并指定其值為perferExternal或者auto。

              2. 指定andorid:minSdkVersion值,其值可以小于8(2.2版本之前)。

              3. 更改該應用程序的build target為API Level 8,以使編譯器能編譯此應用程序。(必須)如果不指定build target,那么舊的Android庫將無法理解android:installLocation屬性,也就無法編譯此應用。

           

            實現以上三個步驟之后,那么如果此應用被安裝到API Level低于8的設備上時,android:installLocation屬性將被忽略。并且該應用會被安裝于RAM上。

          posted on 2011-08-30 10:14 墻頭草 閱讀(4748) 評論(1)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 商洛市| 尤溪县| 南康市| 长葛市| 广南县| 塘沽区| 莒南县| 七台河市| 赤水市| 中山市| 昌乐县| 奉贤区| 万荣县| 雅江县| 兖州市| 扶余县| 鸡泽县| 无棣县| 金乡县| 西乌| 调兵山市| 墨脱县| 贵南县| 仙居县| 资兴市| 丹凤县| 承德市| 额尔古纳市| 县级市| 昆明市| 前郭尔| 乌苏市| 文水县| 五台县| 和林格尔县| 阿拉善左旗| 徐州市| 肃宁县| 台北县| 平南县| 始兴县|