应用程序在配置更改时崩溃

3
我正在开发一个应用程序的一部分,其中运行了一个AsyncTask,因此我希望正确处理配置更改。使用此链接中的代码(与网站上的代码有些不同),我能够在API下旋转手机屏幕时让AsyncTask运行(我正在使用片段的向后兼容库)。然而,当我在我的设备上测试时,每次旋转设备时都会出现以下错误(通过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。

但是,我仍然想知道是什么导致了最初的失败?


这可能会被解决,因为我将改变使用此代码运行对话框的方式。 - TimCS
请不要在标题中加入[solved]。相反,请将您的答案发布为答案并将其标记为已接受的答案。 - Léo Lam
1个回答

0

这不是我的答案,而是问题本身中发布的OP的答案。我已经将其移动到这个社区维基答案中,并稍微“改进”了一下。


我发现这是由于在进行配置更改时使用ProgressDialog和运行AsyncTask造成的。

为了解决这个问题,我现在改用IntentService


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接