应用程序安装在sd卡还是内存选择及设置

SouthWind0 2011-11-17

主要内容是介绍如何使得自己开发的android程序安装到外置储存设备(如sd卡)安装到外置储存设备(如sd卡)的程序有哪些特别的地方兼容性哪些软件最好安装在内存中哪些最好安装在外设上

下面一段是个人废话,可忽略。。

手机内存已经多次告急,安装软件提示内存不足,请清理后再安装。。
国产的很多android软件,像新浪微博、人人网、qq、uc浏览器、腾讯微博、淘宝、支付宝、搜狗输入法、虾米音乐、网易公开课等等数不尽的android客户端,一个个无法移至sd卡,怒其不争啊,你搞社交的、搞电商的、搞音乐的,霸占着rom干啥。参考下国外的优秀电子书、游戏、图片android软件,哪有无法移动的。。唉

1、 设置android程序安装到外置储存设备(如sd卡)还是内存

从android api level 8(即andrid 2.2)后,允许将应用程序安装到外置储存设备(如sd卡)中,通过AndroidManifest.xml文件中manifest的android:installLocation属性设置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      android:installLocation="auto">

此属性可以有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卡还是内存选择及设置好吧,怪不得找不到一个可以安装到sd卡的输入法了。。

(4)Live Wallpapers(壁纸)

在外设卸载时,安装在外设上的Live Wallpapers不可用,系统会采用默认的Live Wallpapers。

(5)Live Folders(home的文件夹)

在外设卸载时,安装在外设上的Live Folders不可用,系统会采用默认的Live Folders。

应用程序安装在sd卡还是内存选择及设置好吧,怪不得htc默认的壁纸和工具不可移动了

(6)App Widgets(应用的Widgets)

在外设卸载时,安装在外设上的App Widgets不可用。通常直到系统重启方可用(或系统设置home应用程序)

(7)Account Managers

<a style="color: #006699;" href="http://developer.android.com/reference/android/accounts/AccountManager.html">AccountManager</a>创建的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

相关推荐

中二病也要开发ANDROID / 0评论 2018-04-08