我正在处理我的应用程序的一部分,它运行AsyncTask
,因此我想正确处理配置更改。
使用this link中的代码(与网站上的代码略有不同)我能够让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。
但是,我仍然想知道是什么原因造成了原来的失败?
答案 0 :(得分:0)
这不是我的回答,而是OP,这是在问题本身中发布的。我已经把它移到这个社区wiki的答案中,然后自由地改进了#34;改进&#34;它有点。
我发现这是由于ProgressDialog
并且在进行配置更改时运行AsyncTask
。
要解决此问题,我现在最终使用了IntentService
。