-2

Мое приложение работает на Android 2.3.3 на 4.2.2Ориентация Изменение, особенно в Android 2.3.3

Я хочу, чтобы избежать рестарт деятельности путем поворота дисплея. Также я добавил атрибут android:configChanges="orientation|screenSize" в манифест к этим Activity. Спасибо LogCat Я мог видеть, что вызывается вместо onCreate() при вращении устройства. Но только в более высоких версиях Android! в 2.3.3 еще onCreate() вызывается после

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

Как вы думаете, это хорошая идея, чтобы избежать Activity для перезапуска в моем случае при изменении конфигурации? Как я могу справиться с этим для Android 2.3.3?

+1

Это походит на попытку остановить реку с плотиной. Конечно, это работает, но вы уничтожите окружающую среду. Адаптируйте приложение к среде (ОС Android) и не пытайтесь изменить окружающую среду в соответствии с вашими потребностями, потому что она станет кровавой. –

+0

да, я согласен с вами! У меня нет опыта в этом деле, и я не знал, как с этим справиться, это был просто самый простой способ для меня. Но вот почему я задал вопрос;) – lis

ответ

3

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

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

Однако существует несколько возможных решений для правильной обработки этой конкретной ситуации.

  1. Вы можете использовать IntentService вместо с AsyncTask. Служба работает в фоновом режиме и отключается от жизненного цикла активности, поэтому вы не будете подвержены изменению ориентации экрана.

  2. Поместите AsyncTask в Fragment. Фрагменты имеют возможность сохранять свои экземпляры.

  3. Заблокируйте программно ориентацию экрана во время выполнения задачи. Самый простой, но не очень рекомендуемый, так как это нарушит работу пользователя.

Посмотрите over this blog post примеры:

+2

Хорошо сказано. Кроме того, погрузчики. – josephus

+0

Мне кажется, что первый способ - лучший. У меня есть более одного AsyncTask, например. один показывает пользователю ProgressDialog во время выполнения, также я не мог (или не должен) заменить его на «IntentService», правильно? Но одна загрузка данных в фоновом режиме, другая чистая база данных с интервалом. Я думаю, что это лучший способ поместить их в «IntentService»?Можно ли запускать более одного «AsyncTask» и более одного «IntentService» в одно и то же время (запускать другой во время обработки). – lis

+0

И, может быть, вы можете сказать мне, что с ними случилось, когда активность перезапущена? Когда он выключен, 'onCanceled' возвращает true в' AsyncTask'? – lis

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