2

어제 우리 고객 중 Android 4.4.2가 포함 된 Xperia Z1에서 앱이 다운 된 것으로 나타났습니다. avd에서 테스트 한 결과,이 예외가 API 18 이전 버전에서는 발생하지 않는다는 것을 알게되었습니다. 대화 상자가 반환 된 후 응용 프로그램이 충돌하지만 그 이유는 AlertDialog.setView 인 것 같습니다.이 줄을 제거하면 응용 프로그램이 중단되지 않기 때문입니다.AlertDialog API를 생성 한 후 IllegalStateException이 발생했습니다.

나는 웹에서 솔루션을 찾고 다른 접근 방식을 시도했지만 이미 나를 돕는 것을 찾지 못했습니다.

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; 

그리고 로그 캣 출력 :

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): [email protected], 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) 
+0

안녕하세요, 로그 상태에서 로그 상태를 보셨습니다. ava.lang.IllegalStateException : 표면이 이미 해제되었습니다. 방문하시기 바랍니다, 그것은 당신을 도울 수 있기를 바랍니다 http://stackoverflow.com/questions/20665636/livewallpaper-java-lang-illegalstateexception-surface-has-already-been-release –

+0

덕분에, 나는 이미이 질문을 보았습니다. 나는 그것이 내 사건에 유용하다고 생각하지 않는다. 대화 상자는 'AsyncTasks'를 만들지 않으며 사용자가 버튼을 누를 때까지 해제되지 않습니다 (대화 상자가 표시되기 전에 앱이 중단되기 때문에 대화 할 수 없습니다). – user3729551

답변

2

우리는 마침내 우리가 그것을 어떻게 작동 시키는지 스스로 알아 냈습니다. 문제는 우리가 여전히 DialogFragments 대신에 비추천 showDialog() -method를 사용하고 있다는 것이 었습니다. showDialog()AlertDialog.setView()이 함께 작동하지 않는 경우가있는 것 같습니다. 분명히 다른 경우에는 여전히 작동하고있는 다른 대화 상자가 있습니다. 우리 앱에 DialogFragments을 소개 한 후에 대화 상자는 이전 API 버전에서와 같이 시작됩니다.

관련 문제