当应用更新时,Android设备上会发生什么?

时间:2013-07-19 18:17:32

标签: android

Play商店更新应用时设备上的工作流程是什么?如果用户同时使用该应用,会发生什么?

我问,因为我们遇到了一些无法找到String ID的崩溃,当我们查看APK时,两个版本中的String资源都可用 - 但崩溃中报告的十六进制ID可以在OLD apk中找到而不是在新的一个。这很奇怪。

这使我们认为Play商店可能在应用程序运行时更新了应用程序的文件和资源,然后当它查找字符串资源以加载某些东西时,它使用了内存中的旧ID,当然也没有在新更新的文件中找到它..导致ResourceNotFound异常。

这怎么可能?它是否可能?我想不会,除了我们查看APK并且崩溃中的ID与旧资源ID匹配而不是我们刚刚推送的新ID。

3 个答案:

答案 0 :(得分:1)

从我在研究中发现的情况来看,似乎App 需要关闭才能使文件可以更新。关闭后,Google Play仅更新apk的更改内容以节省时间和费用。

我发现有几个论坛帖子教你如何从闪存ROM中回滚应用程序选项(这种情况一直发生在root用户设备上)。也许用户在收到更新后尝试回滚。要么是这个,要么崩溃中的ID在你没有更新的apk部分被引用。

来源: Notification of Update

What Happens When You Update an App

Google Play Saves Cost & Time

答案 1 :(得分:0)

如果用户在更新应用程序的同时使用该应用程序,则linux文件系统允许上述行为。保持文件打开的进程(在应用程序运行时认为应用程序可执行文件)将使可执行映像保留在内存中,即使磁盘上的可执行文件已更新。这允许新的apk放置到位并使用仍在内存中的旧exe图像解压缩。

资源文件往往是延迟加载的,因此在内存中导航旧图像将查找资源并可能从新解压缩的应用程序加载资源。该资源可能与旧应用程序不兼容并导致崩溃。

答案 2 :(得分:0)

我记得遇到类似这样的问题 - 我的情况是我们通过用户首选项存储资源ID(甚至是序列化的枚举值)。一旦我们的应用程序更新(新的枚举值,新资源),旧值将从用户首选项加载并传递到代码中,从而导致崩溃。

也许这不是您的问题,但值得检查一下,您是否存储/加载不再存在的资源的ID。