2010-09-09 4 views
2

С обновлением Android 2.2 появилось новое приложение для док-станции. Если мое приложение находится на переднем плане, когда я пристыковываю свой телефон, мое приложение убивается или приостанавливается или что-то в этом роде, и когда я пытаюсь снова открыть приложение, все испортится. Он потерял информацию о своем государстве.Почему автомобильная док-станция испортила мое приложение?

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

Я думаю, как только мы определим, что он делает, я смогу обойти его вокруг.

ответ

1

Все приложения теряют свое состояние, когда их убивают. Фактически, они теряют информацию, когда вы меняете ориентацию, если только вы ее не сохраните (скажем, в onSaveInstanceState).

Если вы хотите, чтобы ваша информация была настолько устойчивой, что она может пережить переход приложения (или сброс системы), вы можете сохранить свое состояние в SharedPreferences, а не в комплекте, который вы получаете в onSaveInstanceState.

Как вы можете сохранить ваше состояние? Вы это вообще делаете?

Кстати, вы также можете добавить приемник вещания для прослушивания ACTION_DOCK_EVENT и проверить состояние EXTRA_DOCK_STATE_CAR и сохранить данные экземпляра, если вам не нравится общая идея SharedPreferences.

+0

Обновление: система сначала вызывает мой метод onRetainNonConfigurationInstance, а затем сразу же 'onDestroy'. Поэтому я сохраняю свое состояние, затем onDestroy пожары цепочки разрушения, а затем, когда его время для восстановления моего состояния, сохраненный экземпляр мертв, потому что onDestroy был вызван, и поэтому мое приложение выполнило свою последовательность выключения. Я поддерживаю состояния Bluetooth, так как я должен знать, действительно ли onDestroy - это уничтожение или просто «поддельный/временный» уничтожить? –

+1

Как ваше приложение обрабатывает изменение ориентации? Переход от портрета к ландшафту также приведет к onDestroy, после чего сразу же будет onCreate. Существует 'Activity.isFinishing()', который говорит вам именно об этом. Ознакомьтесь с документацией для Activity. – EboMike

+0

Я использовал 'android: configChanges', чтобы заблокировать изменение ориентации. –

2

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

Если вы злоупотребляете android: configChanges, чтобы не иметь дело с этим, тогда ответ должен НЕ делать это. Как мы всегда говорили, это касается определенных случаев, когда вы хотите эту оптимизацию. Это не повод избежать изменений конфигурации. Если ваше приложение не будет правильно работать с изменениями конфигурации, будет всегда быть различными способами его можно сломать. Новая док-станция для автомобилей просто делает это немного более очевидным.

На самом деле я очень рекомендую разработчикам делать не использовать android: configChanges. Сохранение нормального поведения - очень хороший способ проверить эту часть вашего приложения, чтобы убедиться, что вы делаете это правильно, и будете вести себя правильно, когда это случится с вами по другим причинам (потому что это, безусловно, будет). Отключение изменений конфигурации для переключателя ориентации значительно усложняет проверку этой части вашего приложения. За исключением очень необычных ситуаций, вы действительно должны поддерживать нормальное поведение здесь и заставить его работать правильно.

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