2010-02-02 3 views
3

Я тестировал, что Android может пройти newVersion < oldVersion до SQLiteOpenHelper.onUpgrade() метод, т.е. он хочет, чтобы приложение понизило свою базу данных.Downgrading DB на Android

Я не хочу обрабатывать этот случай, хотя я хотел бы как-то уведомить пользователя о том, что существует более новая версия моего приложения (которое она, по-видимому, установила ранее), и именно та, которую она должна использовать.

Любые идеи, что было бы лучшим способом достичь этого? Toast? AlertDialog (но в каком контексте)?

ответ

2

Действительно, вы можете назвать этот метод «новой» версией меньшей, чем «старая» версия, но когда это произойдет?

Если вы не хотите, чтобы ваши пользователи вручную переустанавливали приложение, перезаписывая его с более ранним APK, нет необходимости об этом думать.

+1

Представьте себе этот сценарий. Вы мощный пользователь, используя мое приложение и наслаждаясь им. Затем я выпускаю новую версию, которую вы устанавливаете, но не любите (например, вы думаете, что она слишком сильно выросла и стала вирусом), поэтому вы решили вручную установить apk старой версии. Если я не делаю ничего внутри onUpgrade() для обработки этого случая, данные пользователя могут быть повреждены, или я могу бросить RuntimeException, чтобы предотвратить запуск приложения. Ни одно решение не выглядит хорошо для меня. Я знаю, что это будет довольно редкий случай, но я все равно хочу знать ответ:] –

+1

Кажется мне разумной ситуацией, однако я не уверен, почему вы несете ответственность за ошибки приложения в этой ситуации - это далеко сценарий нестандартного использования. Я бы подумал, что опытный пользователь может ожидать, что им придется сделать чистую установку для понижения. –

+0

Даниэль, я думаю, ты прав. Не важно беспокоиться. В этом случае я просто выброшу RuntimeException. Спасибо, что убедили меня;] –

-1

У нас есть несколько активных ветвей нашего приложения (например, v1.x и v2.x), и мы поставляем выпуски для тестирования. Это означает, что тестировщик иногда устанавливает более старую версию поверх новой.

Это хорошая идея, чтобы изящно справиться с этим сценарием (полезная всплывающая подсказка, удалите базу данных и т. Д.), В противном случае тестер увидит сообщение «Force quit», а затем мы должны посмотреть журналы adb logcat чтобы подтвердить, что это произошло из-за несоответствия версии.

Первоначально я опасался, что существуют другие разумные сценарии, где это может произойти, например. при повторной активации старой версии на Android Market (например, из-за катастрофической ошибки в новой версии).

Однако Android docs, кажется, говорят, что вы не можете активировать более старый релиз:

Вы не можете активировать новый APK, который имеет код версии ниже, чем у APK это заменяющего.

Чтобы попасть в этот сценарий, вам нужно будет перестроить старую версию с новым номером версии, прежде чем вы сможете ее активировать. ИМО по-прежнему стоит справиться с этим сценарием, так как кто-то может легко совершить эту ошибку в 4 часа ночи, пытаясь отказать в плохом выпуске!

+0

Это справедливо только для выпуска игрового автомата. Каждый пользователь все еще может установить любую более старую версию приложения из сохраненного файла apk. – Radon8472

Смежные вопросы