android数据储存之应用安装位置
原文地址:http://developer.android.com/guide/topics/data/install-location.html#Compatiblity
从API8開始,你能够将你的应用安装在外部储存。这是一个可选的特征,你能够在你的应用的manifest中声明:android:installLocation属性。假设你不声明这个属性,你的应用程序将会被安装在内部储存,而且不能被移到外置储存。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
... >
当你声明了preferExternal,你要求你的应用程序安装在外置储存,可是系统不确定你的程序一定安装在外置储存。若外置储存已经满了,将会储存在内置储存。用户也能够在两个储存之间移动你的应用程序。若你声明了auto,你表明你的应用程序能够安装在外置储存,可是你没有一个安装位置的偏好。系统会依据一些因素来决定你的应用程序安装在哪。用户也能够在两个储存之间移动你的程序。
当你的应用被安装在外置储存:
1.当你的外置储存挂载在你的设备上时,对你的应用操作没有影响。
2..apk文件会储存在外置储存,可是全部私有的用户数据,数据库,优化的.dex文件,和提取的本地的代码都会保存在内置储存。
3.你的应用被安装的容器使用一个随机生成的key加密,并且仅仅能被安装了这个应用的这个设备解密,这样保证一个sdcard上仅仅有一款同样的应用。
4.用户能够通过系统设置将你的应用移到内置储存。
注意:当用户使用usb储存和电脑共享文件或通过系统设置卸载SD Card,在外置储存中执行的应用会马上被杀死。
向前兼容
在API8之前安装的应用会被安装在内置储存,而且不会被移动到外置储存。
可是你的应用能够通过设置来支持低于API8:、
1.在<manifest>中设置android:instaillLocation为auto或perferExternal.
2.不用改动minSDKVersion,而且保证你的应用代码是兼容的
3.为了编译你的应用程序,将你的build target改为API8,由于低的android库不认识instaillLocation属性,并且不会编译你的应用程序。
那些不用安装在外置储存的应用
用户使用usb储存和电脑共享文件或通过系统设置卸载SD Card,在外置储存中执行的应用会马上被杀死。
为了使你的应用能按预期的运行,假设你使用了一下的特征你不能将你的应用安装在外置储存。
1.服务:你执行的服务将会被杀死,并且当外置储存被挂载时也不会重新启动。可是你能够注冊一个 ACTION_EXTERNAL_APPLICATIONS_AVAILABLE的广播intent,这样当你外置应用变得可用的时候会被提醒。
2.警报服务:你用AlarmManager注冊的服务将被取消,你必须在外置储存被又一次挂载的时候又一次注冊。
3.输入方法引擎:你的IME将会被默认IME代替。
4.动态壁纸:你执行着的壁纸将会被默认的动态壁纸代替。
5.App widget:你的Appwidget会被从桌面移除。
6.账户管理:使用AccountManager创建的账户会消失。
7.同步Adapter:你的AbstractThreadedSyncAdapter
以及它的一切同步方法将不会工作。
8."boot
completed"这个广播的接受者:系统会在外置储存器被挂载之间发出ACTION_BOOT_COMPLETED 的广播,你安装在外置储存的应用不会受到这个广播。
那些须要安装在外置储存的应用
出去以上列表的,其它的应用都能够安装在外置储存,大游戏通常安装在外置储存中,由于游戏在它不活跃的时候不须要提供额外的服务,当外置储存不可用,游戏将会被杀掉,当外置储存变得可用并且用户重新启动游戏,不应该有可见的影响(如果游戏在它正常的Activity生命周期适当的保存了状态)
当你的应用须要兆字节的apk文件时,你应该细致考虑时候应该将应用安装在外置储存,来使用户保存内置储存空间。
android数据储存之应用安装位置的更多相关文章
- (转)Android如何编程设置APP安装位置(外部存储或内部存储)?
Beginning with API Level 8, you can allow your application to be installed on the external storage ( ...
- android数据储存之存储方式
能够将数据储存在内置或可移动存储,数据库,网络.sharedpreference. android能够使用Content provider来使你的私有数据暴漏给其它应用程序. 一.sharedpref ...
- Android数据储存之SharedPreferences总结
写在前面:本文是我参考李刚老师的<疯狂Android讲义>以及API所写的读书笔记,在此表示感谢,本人小白,如有错误敬请指教. SharedPreferences的使用背景: 有时候,应用 ...
- Android数据储存之SQLiteDatabase 简单增删改查
SQLiteDatabase 使用 SQLiteDatabase提供如下方法来打开一个文件对应的数据库: openDatabase(String path, SQLiteDatabase.Cursor ...
- Android数据储存之SQLiteDatabase SQLiteOpenHelper类的简单使用
SQLiteOpenHelper 简介: SQLiteOpenHelper是一个借口!所以不能直接实例化!那我们想要得到SQLiteOpenHelper对象就需要实现该接口!创建该接口的实现类对象! ...
- Android数据储存之SharedPreferences
Android中SharedPreferences通常与Editor连用 接口SharedPreferences常用方法: boolean contains(String str):判断SharedP ...
- Android数据储存之File
openFileOutStream 和 openFileInStream FileInputStream fileInputStream = openFileInput(name); 打开应用下文件 ...
- Android应用程序的安装位置
Android应用程序的默认安装位置以及是否可移动取决于开发者在其AndroidManifest.xml中的设置: <manifestxmlns:android="http://s ...
- androidd 程序默认安装位置和数据存储位置(公用和私用)
默认安装位置: android App 安装到外置SD卡中,缓解手机内置内存的压力: <manifest xmlns:android="http://schemas.android.c ...
随机推荐
- VSTO 学习笔记(十三)谈谈VSTO项目的部署
原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中, ...
- hdu3329(2次dfs)
传送门:The Flood 题意:当水的高度升为多少的时候,能够将这块区域分为两个部分. 分析:枚举高度,先从外围开始一次dfs,将水能淹没的标记,然后看非标记的是否已分为多块. #include&l ...
- poj3678(two-sat)
传送门:Katu Puzzl 题意:n个点,点的取值可以是0或者1.m条边,有权值,有运算方式(并,或,异或),要求和这条边相连的两个点经过边上的运算后的结果是边的权值.问你有没有可能把每个点赋值满足 ...
- C++--allocator类的使用
C++为我们提供了安全的内存空间申请方式与释放方式,可是new与delete表达式却是把空间的分配回收与对象的构建销毁紧紧的关联在一起.实际上,作为与C语言兼容的语言,C++也为我们提供了更加底层的内 ...
- Flex中的DataGrid报错(二)
1.错误描写叙述 此行的多个标记: -holeNum -1067: String 类型值的隐式强制指令的目标是非相关类型 mx.controls:Text. 2.错误原因 将字符串类型赋值给Text ...
- phantomjs,selenium,pyv8,pythonwebkit,,,,,,,,,,,,,
Pyv8,PythonWebKit,Selenium,PhantomJS,Ghost.py 等等.... 快速构建实时抓取集群[searchtb] 定义:http://i.cnblogs.com/Ed ...
- MySQL 模拟Oracle邻接模型树形处理
数据库对层次结构的处理模型有好多种,能够依据自己的需求来设计模型.当然最简单的也是最easy设计的模型就是所谓的邻接模型.在这方面,其它数据库比方Oracle 提供了现成的分析方法 connect b ...
- VC++ 在两个文件互相包含时会出现的错误
首先,要分别在两个文件中实现以下两个类 class Object { public: NewType ToType(); }; class NewType : public Object { } -- ...
- c++对象指针-01(转载)
1.指向对像的指针在建立对像时,编译系统会为每一个对像分配一定的存储空间,以存放其成员,对像空间的起始地址就是对像的指针.可以定义一个指针变量,用来存和对像的指针.如果有一个类:class Time{ ...
- 去掉windows文件末尾的^M: %s/\r//g
去掉windows文件末尾的^M: %s/\r//g