【问题标题】:Download large application data pattern下载大型应用程序数据模式
【发布时间】:2011-02-08 12:59:04
【问题描述】:

我正在为 Android 开发地图渲染应用程序。地图数据相当大,大约 1.1 Gb。由于 .apk 大小在市场和手机中都有限制,因此建议在应用程序启动时下载它。

这是我现在使用的模式:
1.主要活动(用于渲染地图)检查数据是否可用,如果没有,我开始下载活动
2.下载活动启动本地服务
3. 服务下载 zip 文件并解压地图数据
4.服务向下载活动发送事件和通知

我生成了一项服务,因为整个过程可能需要 30 分钟到几个小时不等,具体取决于电话和网络。

但是我无法确保只有一个程序实例在运行,我尝试了所有的 launchmode 属性组合都没有帮助。

正如您可能理解的那样,运行两个实例会导致下载/解压缩崩溃。

这真是令人沮丧!现在我正在对 sdcard 文件锁定进行一些丑陋的读/写操作,并且它大部分时间都在工作以确保只有一个实例在运行。

我的目标是 Android 1.6 及更高版本。

【问题讨论】:

  • 您确定需要向用户手机发送 1.1 Gb 吗?缓冲结果并在需要时发送不是更好的解决方案?
  • 离线模式是必需的。
  • 假设我有 GPRS (not 3G/Wifi/EDGE) 连接并且想使用你的应用程序,那么你能想象它什么时候能够下载这个巨大的文件吗? . 我建议尝试考虑最坏的条件。
  • 感谢您的输入,但在程序说明(市场上)中说明您需要在安装后下载数据。希望广大用户尊重和理解。

标签: android download android-sdcard large-data


【解决方案1】:

为避免多个实例出现问题,您应该使用remote service 而不是本地服务。这样,您只能拥有一个服务实例,该实例将下载应用程序所需的数据。

【讨论】:

  • 没有简单的出路?我对远程服务了解不多,但这听起来有点矫枉过正。启动远程服务只是为了下载一些文件并解压缩它们。啊!我当然会检查一下,谢谢。
  • 其实它们并不像乍一看那么复杂,但是有些概念需要一些时间来适应……一旦你开始使用它们,你就会爱上它们。 .
  • 我已经试过了。也许有些东西配置不正确。当我按下我的下载活动(完成应用程序)时,服务停止(调用onDestory)。如果下载仍然在后台继续,那就太好了,有什么想法吗?但它似乎更好地处理了多个实例的情况。
  • 如何启动服务?另外,也许您在 onPause 方法中的活动中调用 close ?我对服务的调用是: startService(new Intent(this, DataService.class)); bindService(new Intent(IDataServiceBinder.class.getName()),mConnection, Context.BIND_AUTO_CREATE);
  • startService 部分成功了,谢谢! (我只是绑定,没有明确启动服务)
【解决方案2】:

1.1GB 对于移动设备来说是一个巨大的数据量。即使通过wifi,除非连接非常好,否则正如您所说,这需要时间,并且还会影响手机的性能。我预计用户的体验会很糟糕——他们的手机在下载过程中会很慢,在解压这么多数据的过程中可能无法使用,并且应用程序本身在下载数据之前根本无法使用已满(可能需要重试几次)。

如果是我,我会寻找一种方法来分解数据,也许是按地理区域,然后以包的形式下载。这样,如果包下载失败,应用程序可以重试,并且用户在某种程度上仍然可以使用该应用程序。您说您的应用程序是地图应用程序,因此您可以识别用户的位置/国家并首先下载最合适的包。这是否可行将归结为用户是否根本无法在没有所有数据的情况下使用该应用程序。

问题在于,Android 应用程序可能在任何时候都被 GC 处理,因此您需要让应用程序在相对较长的时间内运行并执行密集工作,但在后台进行竞争。用户需要做的就是打开一个像浏览器这样的大应用程序,你的服务很可能会被关闭。通过一次大规模下载交易,您将自己逼入绝境。

或者,您能否在 SD 卡上提供物理数据?这不是一个很好的解决方案,但考虑到数据集的大小,它似乎值得考虑。

【讨论】:

  • 感谢您的出色回答,我已经将下载分成大约 200 个 3mb 的部分,这不是什么大问题。如果下载中断,它将从最新的好部分恢复。问题是有时我会得到多个实例,并且会加倍下载部分(非常慢)并最终尝试将多个 zip 文件解压缩到同一个目的地,这当然行不通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
相关资源
最近更新 更多