以下内容主要参考自官网的描述。

从Android API-8开始,android允许你将应用程序安装到外部存储空间中去(比方:SD卡),你可以在AndroidManifest.xml中添加android:installLocation属性来声明应用安装的位置。如果你没有声明android:installLocation属性,那么你的应用默认只会被安装到内部存储空间中且不能移动到SD卡中。为了让系统能够将你的应用程序安装到外部存储中,你可以在AndroidManifest.xml文件中设置installLocation的值为auto或者preferExternal.

如:

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

如果你将installLocation的属性声明为preferExternal,那么你的应用将被要求安装在外部存储空间中。即使是这样系统仍然不保证你的应用一定会被安装到外部存储空间,如果你的外部存储空间已经满了,系统仍然可能将你的应用程序安装到内部存储空间中。用户仍然可以将应用程序在内部存储空间与外部存储空间进行移动. 如果你将installLocation的属性声明为auto,你的应用程序可能会被安装在外存储空间中,但是你没有特指安装的位置,由系统根据一些因素去决定你的应用程序安装位置,当然用户也可以将应用程序在内部存储空间与外部存储空间之间进行移动。 当你的应用程序被安装在外部存储空间中,需要知道以下几点 1,将应用程序安装到外部存储空间中,并不会影响程序的性能,只要外部存储被挂载到设备上即可。 2,apk文件将被存储到外部存储空间中,但是用户数据,数据库,dex文件以用解压后的本地代码仍然会被存储到内部存储空间中。 3,应用程序会对应用唯一的容器,此容器是一个被加密过的随机数,解密只能通过应用程序原始安装位置。 4,用户可以通过系统设置将应用程序移到内部存储空间。 特别要注意:当用户通过USB大容量存储共享文件或者通过系统设置将sdcard unmount时,外部存储将从设从设备上unmount,此时正在运行的被安装在外部存储空间的应用程序将被kill掉。 应用程序能够被安装到外部存储空间这一特性只能适用于设备的API版本在8及以上才可以。低于8,应用程序将被安装到内部存储空间且不能够被移动到外部存储空间。由于目前大部分的设备的API版本通常都在8以下,所以这里对于API版本小于8的情况不予说明。 以下情况下的应用程序不应该安装在安装在外部存储空间中。
当用户通过USB大容量存储与电脑共享文件时,任何正在运行且被安装在外部存储的应用程序都将被kill.kill应用程序,有时对用户是不可见的,这种情况下的应用程序被kill掉了将会非常严重。如果你的应用程序具备以下特征且你想让你的应用程序按照你所预想的那样运行,你最好不要将应用程序安装到外部存储空间。 1,Services.
正在运行的Service被kil掉将不会重启在外部存储设备重新挂载时。但是你可以通过intent注册ACTION_EXTERNAL_APPLICATIONS_AVAILABLE广播,它会通知被安装到外部存储的应用程序系统的外部存储又可以再用了,这时你就可以重启你的service了 2.Alarm Services
通过AlarmManager注册的alarms会被取消,当外部存储重新挂载时,你必须手动再次注册。 3,Input Method Engines
你的输入法将会被默认输入法代替。当外部存储重新挂载时,用户可以能过系统设置重新激活它。 4,Live Wallpapers
此情况与上面第3种情况类似,正在运行的动态壁纸将会被默认壁纸代替,当外部存储重新挂载时,用户可以再次选择此动态壁纸。 5,App Widgets
你的App Widgets将会从桌面上被移除。当外部存储重新挂载时,你的App Widgets仍然不可用,除非你重新设置桌面应用。 6,Account Managers
通过AccountManager创建的帐户将会消失,直到外部存储重新挂载 7,Syn Adapter与Device Administrators(暂时没有搞懂) 8,Broadcast Receivers listerning for "boot completed"
由于系统发送的ACTION_BOOT_COMPLETED广播在外部存储挂载前,所以安装在外部存储的应用程序都收不到此广播即开机广播。

android关于installLocation的更多相关文章

  1. 如何将为Android开发的AIR应用转移到SD卡

    如果你想用户能够将为Android开发的AIR应用转移到SD卡上,所需要做的是在你的应用程序描述符中修改一下.如果你想你的应用程序默认安装到内置存储器中,但是允许用户把它转移到SD卡上,设置andro ...

  2. android:installLocation = "auto" 的用法

    在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:inst ...

  3. android:installLocation简析

    在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:inst ...

  4. android:installLocation 解析

    决定了apk安装位置 有三个选项:1.auto 2.internalOnly 3.preferExternal http://www.cnblogs.com/Lefter/archive/2012/0 ...

  5. 【墙内备份】Android 6.0 APIs

    Android 6.0 APIs In this documentSHOW MORE Fingerprint Authentication Confirm Credential App Linking ...

  6. android .apk安装时遇到NSTALL_FAILED_CONTAINER_ERROR错误

    在一台酷派上装apk时遇到问题: android Installation error: INSTALL_FAILED_CONTAINER_ERROR 遇到问题后baidu google修改为andr ...

  7. Android存储空间不足的解决办法

    安装应用时,有时会出现错误Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE,这是存储空间不足的错误,这时就只能将应用安装到SD卡,在And ...

  8. Android实现系统重新启动

    有些Android版本没有系统重启的功能,非常不方便.需要我们自己开发一个能够重新启动的应用. 首先定义布局文件: <?xml version="1.0" encoding= ...

  9. Android学习笔记之AndroidManifest.xml文件解析(转)

    //自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xm ...

随机推荐

  1. [SAN4N学习笔记]使用SysTick精准延时

    一.准备工作:      将上一节搭建的LED工程复制一份,命名为"2.systick".这一节主要讲如何使用系统的SysTick节拍定时器来进行精准延时程序. 二.程序编写: S ...

  2. ubuntu14.04安装ia32-lib

    sudo apt-get install libc6:i386 sudo -i cd /etc/apt/sources.list.d echo "deb http://old-release ...

  3. MySQL WorkBench中文教程

    在网上找到了一份MySQL WorkBench的教程,点此可以下载Work Bench教程(原文),为了便于学习和交流,请朋友帮忙翻译成了中文,点此可以下载Work Bench教程(中文翻译版). 具 ...

  4. 16个最棒的jQuery视差滚动效果教程

    今天我们整理了16个最棒的jQuery视差滚动效果教程 , 并附有演示地址,你可以快速的查看教程的效果,或者应用在自己的项目中.希望本文对想要学习或者使用jQuery视差效果的朋友有帮助,慢慢的欣赏吧 ...

  5. Android应用开发学习之表格视图

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文我们来学习一个使用表格视图的程序,下图是该程序的运行效果: 该程序主Activity文件内容如下: packag ...

  6. 运用HBuilder上传到GitHub

    Hbuilder安装github插件 如图所示: 一.打开自己GitHub,新建一个"库" 2.设置自己项目名和简介 3.建完后,就会显示GitHub要上传路径 4.打开" ...

  7. hashCode与equals详解

    在工作中写业务类通常都会重写hashCode与equals方法,而这两个方法的区别与用途也常常被问道.平时也只是大概知道这二者的用途,今天闲下来,查阅资料加上自己的理 解,总结记录下. hashCod ...

  8. PHP环境配置综合篇

    1.WNMP: http://www.wnmp.com.cn/     En: https://www.getwnmp.org/ 2.xampp:https://www.apachefriends.o ...

  9. 从零开始学android开发-创建第一个android项目

    打开ADT开发工具

  10. 启动hadoop,报错Error JAVA_HOME is not set and could not be found

    报如错误:JAVA_HOME is not set and could not be found,可能是因为JAVA_HOME环境没配置正确,还有一种情况是即使各结点都正确地配置了JAVA_HOME, ...