zoukankan      html  css  js  c++  java
  • 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文件时,你应该细致考虑时候应该将应用安装在外置储存,来使用户保存内置储存空间。

  • 相关阅读:
    [Javascript Crocks] Apply a function in a Maybe context to Maybe inputs (curry & ap & liftA2)
    Error: 17053 LogWriter: Operating system error 21(The device is not ready.)
    PPS2013校园招聘笔试题
    RobotFrameWork(十一)AutoItLibrary测试库在win7(64bit)下安装及简单使用
    iOS 5 故事板入门(3)
    Eclipse代码字体、颜色美化,更改字体大小、颜色
    iOS 5 故事板入门(4)
    54. 如何在测试中触发服务器上运行的代理
    【PHP SDK for OpenStack/Rackspace APIs】身份验证
    JQuery总结
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4011660.html
Copyright © 2011-2022 走看看