在開發時可以讓Android應用程式支援安裝到SD卡

來源:互聯網
上載者:User
Android系統在2.1版本之前,應用程式是只能安裝到機身記憶體(RAM)中,這一特性從某種角度上講,阻止了Android的發展,因為RAM的空間是有限的,所以這一特性限制了應用程式的體積,也就限制了應用程式的功能。

  自從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裡。

    auto——意味著此應用程式可能安裝到擴充儲存,但是對安裝位置沒有特別偏好,將有系統根據自身演算法,參考很多因素之後決定將此應用程式安裝到哪裡。(http://www.my400800.cn )

    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. IME程式不應該支援APP2SD。如果卸載SD或者啟用USB,那麼該IME將被終止,並由系統預設IME所替代。

    3. 壁紙和包含案頭小工具(Widget)等常顯於介面的應用程式不應該支援APP2SD。

    4. AccountManager等與使用者資料有關的應用程式不應該支援APP2SD,因為在SD卡正常掛載之前,程式都無法看到通過AccountManager建立的使用者。

  如果應用程式有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上。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.