У нас есть несколько активных ветвей нашего приложения (например, v1.x и v2.x), и мы поставляем выпуски для тестирования. Это означает, что тестировщик иногда устанавливает более старую версию поверх новой.
Это хорошая идея, чтобы изящно справиться с этим сценарием (полезная всплывающая подсказка, удалите базу данных и т. Д.), В противном случае тестер увидит сообщение «Force quit», а затем мы должны посмотреть журналы adb logcat
чтобы подтвердить, что это произошло из-за несоответствия версии.
Первоначально я опасался, что существуют другие разумные сценарии, где это может произойти, например. при повторной активации старой версии на Android Market (например, из-за катастрофической ошибки в новой версии).
Однако Android docs, кажется, говорят, что вы не можете активировать более старый релиз:
Вы не можете активировать новый APK, который имеет код версии ниже, чем у APK это заменяющего.
Чтобы попасть в этот сценарий, вам нужно будет перестроить старую версию с новым номером версии, прежде чем вы сможете ее активировать. ИМО по-прежнему стоит справиться с этим сценарием, так как кто-то может легко совершить эту ошибку в 4 часа ночи, пытаясь отказать в плохом выпуске!
Представьте себе этот сценарий. Вы мощный пользователь, используя мое приложение и наслаждаясь им. Затем я выпускаю новую версию, которую вы устанавливаете, но не любите (например, вы думаете, что она слишком сильно выросла и стала вирусом), поэтому вы решили вручную установить apk старой версии. Если я не делаю ничего внутри onUpgrade() для обработки этого случая, данные пользователя могут быть повреждены, или я могу бросить RuntimeException, чтобы предотвратить запуск приложения. Ни одно решение не выглядит хорошо для меня. Я знаю, что это будет довольно редкий случай, но я все равно хочу знать ответ:] –
Кажется мне разумной ситуацией, однако я не уверен, почему вы несете ответственность за ошибки приложения в этой ситуации - это далеко сценарий нестандартного использования. Я бы подумал, что опытный пользователь может ожидать, что им придется сделать чистую установку для понижения. –
Даниэль, я думаю, ты прав. Не важно беспокоиться. В этом случае я просто выброшу RuntimeException. Спасибо, что убедили меня;] –