【发布时间】:2014-09-05 11:06:11
【问题描述】:
昨天,我们的一位客户报告说,我们的应用在他的 Xperia Z1 上使用 Android 4.4.2 崩溃。在 avd 中进行测试后,我们发现 API 18 或更早版本不会发生此异常。返回 Dialog 后应用程序崩溃,但原因似乎是 AlertDialog.setView,因为如果我们删除此行,应用程序不会崩溃。
我已经花了很长时间在网上搜索解决方案并尝试不同的方法,但没有找到任何对我有帮助的东西。
API 19 和AlertDialog.setView 是否存在任何已知问题?我们做错了什么吗?有人知道如何解决这个问题吗?
提前致谢
德克
这是我用来创建对话框的(简化但仍然崩溃的)代码:
AlertDialog alert = null;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false).setPositiveButton("OK",
new DialogInterface.OnClickListener()
{
...
});
builder.setNeutralButton(
getResources().getString(R.string.text_button_help),
new DialogInterface.OnClickListener()
{
...
});
builder.setView(this.getLayoutInflater().inflate(R.layout.timeline,
null));
alert = builder.create();
return alert;
还有 LogCat 输出:
06-11 06:44:25.710: E/ViewRootImpl(1188): Attempting to destroy the window while drawing!
06-11 06:44:25.710: E/ViewRootImpl(1188): window=android.view.ViewRootImpl@b237f958, title=foo/bar
06-11 06:44:25.820: W/dalvikvm(1188): threadid=1: thread exiting with uncaught exception (group=0xb1a3aba8)
06-11 06:44:25.840: E/AndroidRuntime(1188): FATAL EXCEPTION: main
06-11 06:44:25.840: E/AndroidRuntime(1188): Process: foo, PID: 1188
06-11 06:44:25.840: E/AndroidRuntime(1188): java.lang.IllegalStateException: Surface has already been released.
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.Surface.checkNotReleasedLocked(Surface.java:408)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.Surface.unlockCanvasAndPost(Surface.java:261)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2507)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2409)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2253)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1883)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.Choreographer.doFrame(Choreographer.java:544)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.os.Handler.handleCallback(Handler.java:733)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.os.Handler.dispatchMessage(Handler.java:95)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.os.Looper.loop(Looper.java:136)
06-11 06:44:25.840: E/AndroidRuntime(1188): at android.app.ActivityThread.main(ActivityThread.java:5017)
06-11 06:44:25.840: E/AndroidRuntime(1188): at java.lang.reflect.Method.invokeNative(Native Method)
06-11 06:44:25.840: E/AndroidRuntime(1188): at java.lang.reflect.Method.invoke(Method.java:515)
06-11 06:44:25.840: E/AndroidRuntime(1188): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-11 06:44:25.840: E/AndroidRuntime(1188): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-11 06:44:25.840: E/AndroidRuntime(1188): at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
您好,请在日志中查看 ava.lang.IllegalStateException: Surface 已发布的行状态。 ,请访问,希望对你有帮助stackoverflow.com/questions/20665636/…
-
谢谢,我已经看过这个问题,但我认为这对我来说没有用。该对话框不会创建任何
AsyncTasks,并且在用户按下按钮之前也不会被关闭(他不能因为应用程序在显示对话框之前崩溃)...
标签: android android-alertdialog android-4.4-kitkat illegalstateexception