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

从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. 转载:C++之高精度算法

    C++之高精度算法 注意:本文转载自http://blog.sina.com.cn/s/blog_4fdb102b010087ng.html,十分感谢原作者:忍者    前言:由于计算机运算是有模运算 ...

  2. linux 下查看网速的方法 (不需要安装任何软件)

    sudo watch -n 1 "/sbin/ifconfig eth0 | grep -E \"字节|数据包\"" 若是英文版linux: sudo watc ...

  3. What does the “__block” keyword mean?

    It tells the compiler that any variable marked by it must be treated in a special way when it is use ...

  4. hdoj 1200 To and Fro

    To and Fro Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  5. PHP判断变量是否为长整形的方法

    PHP判断变量是否为长整形的方法,可用于判断QQ号等,避免了int溢出的问题 <?php /** * 判断变量是否为长整数(int与整数float) * @param mixed $var * ...

  6. How to trace a java-program

    up vote17down votefavorite 8 As a sysadmin I sometimes face situations, where a program behaves abno ...

  7. \n 与 \r

    符号 ASCII码 意义 \n 换行NL \r 回车CR 回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return 换行 \n 本义是光标往 ...

  8. Shell变量命名规则

    变量与变量内容以一个等号『=』来连结,如下所示: 『myname=chenfei0801』 等号两边不能直接接空格符,如下所示为错误: 『myname = chenfei0801』或『myname=c ...

  9. angularjs-yeoman环境配置

    yum install npm -y npm install -g grunt-cli bower yo generator-karma-require generator-angular-requi ...

  10. ubuntu16.04 : 4: [: y: unexpected operator

    Ubuntu16.04 执行行脚本出错 在使用sh 执行脚本 出错标志 : 4: [: y: unexpected operator 原因:sh是连接到dash的,又因为dash跟bash的不兼容所以 ...