Android应用程序的安装位置(二)

不应该安装在外部存储器上的应用程序

当用户启用USB存储器来跟计算机共享文件时(或者是卸载或移除外部存储器),任何被安装在外部存储器上,并且当前正在运行的应用程序都会被杀死。在USB存储器被禁用和外部存储器被重新挂载到设备上之前,系统不会有效的感知到引用程序的存在。除了终止应用程序并让它对用户无效之外,这样做还可以中断某些更严重的应用程序类型。为了让你的应用程序能够像预期的那样,如果它使用了以下功能,你不应该允许你的应用程序被安装在外部存储器上,由于在外部存储器被卸载时,会引发一些后果:

Services

         在外部存储器被卸载时,正在运行的Service将会被终止,而在外部存储器重新被挂载时,它也不会被重启。但是,你可以注册ACTION_EXTERNAL_APPLICATIONS_AVAILABLE类型的广播Intent,当被安装在外部存储器上的应用再次对系统有效时,它会给你的应用程序发通知。这时,你可以重启你的服务。

Alarm Services

        你用AlarmManager注册的闹钟会被取消。在外部存储器被重新挂载时,你必须手动重新注册闹钟。

Input Method Engines

        你的IME会被默认的IME替代。当外部存储器被重新挂载时,用户可以打开系统设置重新启用你的IME

Live Wallpapers

       你的正在运行的LiveWallpaper会被默认的LiveWallpaper所替代。当外部存储器被重新挂载时,用户可以再次选择你的LiveWallpaper

App Widgets

       你的AppWidget会被从主屏上删除。当外部存储器被重新挂载时,你的AppWidget不会自动的对用户有效,除非系统重新设置主应用程序(通常会一直到系统重启)。

Account Managers

      你用AccountManager创建的账号,会一直到外部存储器被重新挂载才会显示。

Sync Adapters

      直到外部存储器被重新挂载,你的AbstractThreadedSyncAdapter和所有的异步功能才会工作。

Device Administrators

      你的DeviceAdminReceiver和所有的管理员能力会被禁用,这可能会产生一些不可预知的结果,甚至会持续到外部存储器被重新挂载之后。

Broadcast ReceiversListening For “boot completed”

      在外部存储器被从设备上卸载之前,系统会发送ACTION_BOOT_COMPLETED广播。如果你应用程序被安装在外部存储器上,它就不会接收到这个广播。

Copy Protection

      如果你的应用程序使用了GooglyPlay的复制保护功能,你的应用程序不会被安装在设备的SD卡上。但是,如果你使用了GooglePlayApplicationLicensing来代替,你的应用

      程序就可以被安装在内部或外部存储器上,包括SD卡。

如果你的应用程序使用了上述功能,你就不应该允许你的应用程序安装在外部存储器上。默

认情况,系统不会允许你的应用程序安装在外部存储器上,因此你不必担心既存的应用程序。但是,如果你确定你的应用程序不能安装在外部存储器上,那么你应该通过声明带有“internalOnly”值的anroid:installLocation属性来明确说明。尽管这样不会改变默认行为,但它会明确指示你的应用程序只能被安装在内部存储器上,并告诉其他开发者是已经被决定的事。

应该安装在外部存储器上的应用程序

简单的说,任何不使用上述所列功能的应用程序安装在外部存储器上是安全的。通常一些大型游戏会允许把应用程序安装在外部存储器上,因为通常游戏在不活动时不会提供额外的服务。当外部存储器无效,且游戏进程被杀死时,不会影响外部存储器再次有效且用户重启游戏时的可视效果(假定游戏在标准的Activity生命周期中正确的保存了它们的状态)。

如果你的应用程序需要几M字节存储空间,你就应该认真考虑是否允许应用程序安装在外部存储器上,以便用户可以保留内部存储的空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值