3

У меня есть деятельность. Эта деятельность содержит Fragment в пределах ViewPager. Фрагмент должен копировать файлы (с ProgressDialog), но когда я поворачиваю экран, когда он занят, активность перезапускается, и все просто останавливается.Запуск перезагрузки при изменении вращения

Я попытался добавления android:configChanges="orientation|screenSize" к AndroidManifest, но это обыкновение быть решением либо потому, что тогда мой AdView и Toolbar не перезагружается при смене вращения:

До:

После:

(Обратите внимание на разницу с высоты панели инструментов и AdView?)

Как я могу сохранить активность/фрагмент живой, с рабочим Toolbar и AdView?

Благодаря

+0

вам может понадобиться 2 макета - http: // stackoverflow.com/questions/17945130/prevent-activity-restart-when-orientation-changes – Tasos

+0

сделать приложение либо портретом/пейзажем; приложение должно разрешить обе ориентации; если вы не можете использовать это в манифесте под тегом активности android: screenOrientation = "portrait" – DJphy

+0

@DJphy Приложение должно иметь возможность поворота для хорошего пользовательского интерфейса. –

ответ

1

необходимо скопировать файлы

, что очень мало людей, как правило, понимают, о Android является то, что Activity и Fragment не место для выполнения длительных операций, таких как загрузка материала из Интернета или копирование файлов.

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

Правильный способ борьбы с таким вопросом должен иметь Service выполнить длинную операцию работает, Activity или Fragment должны запустить службу, а затем сразу же «связывать» к нему, выполняя обычную unbind и bind снова на вращение.

Вы можете прочитать здесь о сервисных и ограничивающей услуги: http://developer.android.com/guide/components/bound-services.html

После активности (или его фрагмент) связан с Service, то он может зарегистрировать его самостоятельно в качестве слушателя и отчеты службы вернуться к нему статус/ход операции.

На вершине ее, если деятельность отсоединяется от службы, служба может использовать команду startForeground поместить уведомление в строке состояния устройства и сохранить уведомления пользователя о ходе работы без необходимости использования activity

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

+0

Спасибо за ответ. Я попробую это и соглашусь, если это сработает. –

+0

Один маленький вопрос. Лучше ли связывать его с «Фрагментом» или «Деятельностью»? –

+0

Это не имеет значения. Привязать к тому, которое контролирует индикатор выполнения. – Budius