Приложение вылетает при изменении конфигурации
Я работаю над частью моего приложения, где оно запускает AsyncTask
и из-за этого я хотел правильно обрабатывать изменения конфигурации.
Используя код по этой ссылке (который немного отличается от кода на сайте), я смог получить AsyncTask
запускать поворот экрана на телефоне под API (я использую обратно совместимые библиотеки для фрагментов).
Однако затем я проверил это на своем устройстве, и каждый раз, когда я поворачиваю устройство, я получаю следующую ошибку (регистрируется через logcat):
08-21 07:33:31.634: W/Surface(488): java.lang.Throwable
08-21 07:33:31.634: W/Surface(488): at android.view.Surface.<init>(Surface.java:337)
08-21 07:33:31.634: W/Surface(488): at com.android.server.wm.ScreenRotationAnimation.<init>(ScreenRotationAnimation.java:258)
08-21 07:33:31.634: W/Surface(488): at com.android.server.wm.WindowManagerService.startFreezingDisplayLocked(WindowManagerService.java:12303)
08-21 07:33:31.634: W/Surface(488): at com.android.server.wm.WindowManagerService.updateRotationUncheckedLocked(WindowManagerService.java:7697)
08-21 07:33:31.634: W/Surface(488): at com.android.server.wm.WindowManagerService.updateRotationUnchecked(WindowManagerService.java:7602)
08-21 07:33:31.634: W/Surface(488): at com.android.server.wm.WindowManagerService.updateRotation(WindowManagerService.java:7565)
08-21 07:33:31.634: W/Surface(488): at com.android.internal.policy.impl.PhoneWindowManager.updateRotation(PhoneWindowManager.java:6793)
08-21 07:33:31.634: W/Surface(488): at com.android.internal.policy.impl.PhoneWindowManager$MyOrientationListener.onProposedRotationChanged(PhoneWindowManager.java:760)
08-21 07:33:31.634: W/Surface(488): at android.view.WindowOrientationListener$ScreenOrientationEventListenerImpl.onSensorChanged(WindowOrientationListener.java:534)
08-21 07:33:31.634: W/Surface(488): at android.hardware.SystemSensorManager$ListenerDelegate$1.handleMessage(SystemSensorManager.java:256)
08-21 07:33:31.634: W/Surface(488): at android.os.Handler.dispatchMessage(Handler.java:99)
08-21 07:33:31.634: W/Surface(488): at android.os.Looper.loop(Looper.java:175)
08-21 07:33:31.634: W/Surface(488): at com.android.server.ServerThread.run(SystemServer.java:1774)
РЕДАКТИРОВАТЬ
Это происходит, когда диалоговое окно хода выполнения отображается, и AsyncTask работает во время изменения конфигурации.
В качестве обходного пути я использовал IntentService.
Тем не менее, я все еще хочу знать, что вызвало первоначальный сбой?
1 ответ
Это не мой ответ, а ОП, который был размещен в самом вопросе. Я переместил его в этот вики-ответ сообщества и позволил немного "улучшить" его.
Я обнаружил, что это из-за ProgressDialog
и работает AsyncTask
в то время как изменение конфигурации было сделано.
Чтобы это исправить, я использовал IntentService
вместо сейчас.