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

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

我问,因为我们有一些崩溃的地方找不到stringID,而当我们查看APK时,string资源在这两个版本中都可用 – 但是在崩溃中报告的hexID是在旧版apk中find的,而不是在NEW一。 这很奇怪。

这导致我们认为Play商店可能已经在应用程序运行时更新了应用程序的文件和资源,然后当它查找string资源来加载内存中使用的旧ID时,它当然没有find它在最近更新的文件..导致ResourceNotFoundexception。

这怎么可能? 这甚至有可能吗? 我不认为,除了我们查看的APK和在崩溃中的ID匹配旧的资源ID,而不是我们刚推出的新ID。

Solutions Collecting From Web of "当应用程序更新时,Android设备上会发生什么?"

从我在研究中可以find的东西,似乎应该closures该应用程序,以便文件可以更新。 closures后,Google Play只会更新apk的变化部分,以节省时间和成本。

有几个论坛post,我发现,教你如何从闪存ROM(这一直发生的根源设备)回滚应用程序选项。 也许用户试图收到更新后回滚。 无论是,或者在崩溃中的ID是在您的未更新的apk的部分引用。

来源: 更新通知

更新应用程序时会发生什么情况

Google Play可节省成本和时间

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

资源文件往往是懒惰加载,所以浏览内存中的旧图像将查找资源,并可能从新打开的应用程序加载资源。 资源可能与旧应用程序不兼容,并导致崩溃。

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

也许这不是你的问题,但它的价值检查,看看你没有存储/加载不再存在的资源ID。