android:configChanges="orientation|keyboard"
도 효과가 없네요.
onCreate 에서 alertDialog 생성 시키지 않고
onStart 로 모두 옮겨두어도.. 앱 시작하자마자 Dialog 가 뜨고..
그 상태에서 가로로 전환하면..여지없어 앱이 죽고 있습니다.
아래 조언 중에서 onCreateDialog 에서 dialog 생성하고
onStart 에서 show 만 해주라는 내용을 아래와 같이 코딩했습니다.
@Override
protected Dialog onCreateDialog( int id )
{
Dialog temp = null;
temp = new AlertDialog.Builder(this)
.setTitle("title")
.setMessage("choose!")
.setPositiveButton("btn-01", mClick)
.setNegativeButton("btn-02", mClick)
.show();
}
}
catch(Exception e){}
return temp;
}
@Override
public void onStart() {
super.onStart();
((Dialog) onCreateDialog(0)).show();
}
onCreateDialog 안에 구현된 alertDialog 정상적으로 보이지만,가로로 변경하면 앱이 그대로 Force close 상태가 되네요.
위의 코드가 잘못된거면...지적 부탁드립니다. 작동을 안해요 ㅠㅠㅠ
09-02 23:40:21.344: DEBUG/dalvikvm(163): GC_EXPLICIT freed 2329 objects / 177448 bytes in 86ms
09-02 23:40:23.814: INFO/WindowManager(82): Setting rotation to 1, animFlags=0
09-02 23:40:23.835: INFO/ActivityManager(82): Config changed: { scale=1.0 imsi=450/8 loc=ko_KR touch=3 keys=1/1/2 nav=3/1 orien=2 layout=34 uiMode=17 seq=64}
09-02 23:40:24.144: DEBUG/dalvikvm(82): GC_EXTERNAL_ALLOC freed 3475 objects / 166568 bytes in 93ms
09-02 23:40:24.274: VERBOSE/RenderScript_jni(163): surfaceCreated
09-02 23:40:24.274: VERBOSE/RenderScript_jni(163): surfaceChanged
09-02 23:40:24.434: INFO/WindowManager(82): Setting rotation to 0, animFlags=1
09-02 23:40:24.524: INFO/ActivityManager(82): Config changed: { scale=1.0 imsi=450/8 loc=ko_KR touch=3 keys=1/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=65}
09-02 23:40:24.524: INFO/UsageStats(82): Unexpected resume of com.android.launcher while already resumed in com.android.launcher
09-02 23:40:24.724: VERBOSE/RenderScript_jni(163): surfaceDestroyed
09-02 23:40:24.834: DEBUG/dalvikvm(163): GC_EXTERNAL_ALLOC freed 2391 objects / 111400 bytes in 60ms
09-02 23:40:24.914: INFO/TtsService(575): Stopping
09-02 23:40:24.914: INFO/TtsService(575): Stopped
09-02 23:40:24.914: DEBUG/AndroidRuntime(6519): Shutting down VM
09-02 23:40:24.914: VERBOSE/TtsService(575): onDestroy() completed
09-02 23:40:24.924: WARN/dalvikvm(6519): threadid=1: thread exiting with uncaught exception (group=0x4001d7f0)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): FATAL EXCEPTION: main
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): java.lang.RuntimeException: Unable to destroy activity {pkg.MyTest/pkg.MyTest.MyTest_Activity}: java.lang.NullPointerException
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3655)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.app.ActivityThread.access$2900(ActivityThread.java:125)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.os.Handler.dispatchMessage(Handler.java:99)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.os.Looper.loop(Looper.java:123)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at java.lang.reflect.Method.invokeNative(Native Method)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at java.lang.reflect.Method.invoke(Method.java:521)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at dalvik.system.NativeStart.main(Native Method)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): Caused by: java.lang.NullPointerException
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at pkg.MyTest.MyTest_Activity.onDestroy(MyTest_Activity.java:41)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642)
09-02 23:40:24.934: ERROR/AndroidRuntime(6519): ... 11 more
09-02 23:40:25.014: DEBUG/dalvikvm(163): GC_EXPLICIT freed 8168 objects / 479424 bytes in 77ms
09-02 23:40:25.044: VERBOSE/RenderScript_jni(163): surfaceCreated
09-02 23:40:25.044: VERBOSE/RenderScript_jni(163): surfaceChanged
09-02 23:40:25.564: DEBUG/dalvikvm(163): GC_FOR_MALLOC freed 7942 objects / 380552 bytes in 35ms
09-02 23:40:25.854: DEBUG/dalvikvm(163): GC_FOR_MALLOC freed 8567 objects / 365864 bytes in 41ms
09-02 23:40:26.084: DEBUG/dalvikvm(163): GC_EXPLICIT freed 4249 objects / 193632 bytes in 38ms
09-02 23:40:27.174: DEBUG/dalvikvm(82): GC_EXPLICIT freed 2791 objects / 150584 bytes in 93ms
09-02 23:40:33.314: DEBUG/dalvikvm(607): GC_EXPLICIT freed 150 objects / 8096 bytes in 56ms
09-02 23:40:34.186: WARN/ActivityManager(82): Activity destroy timeout for HistoryRecord{44a94ec8 pkg.MyTest/.MyTest_Activity}
09-02 23:40:42.314: DEBUG/dalvikvm(538): GC_EXPLICIT freed 220 objects / 14024 bytes in 58ms
09-02 23:40:47.334: DEBUG/dalvikvm(211): GC_EXPLICIT freed 835 objects / 46248 bytes in 76ms
09-02 23:40:53.864: INFO/Process(6519): Sending signal. PID: 6519 SIG: 9
09-02 23:40:53.914: WARN/InputManagerService(82): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44b9f1d8
09-02 23:40:53.964: INFO/ActivityManager(82): Process pkg.MyTest (pid 6519) has died.
09-02 23:40:53.964: INFO/WindowManager(82): WIN DEATH: Window{44b1f930 pkg.MyTest/pkg.MyTest.MyTest_Activity paused=false}
09-02 23:40:53.964: INFO/WindowManager(82): WIN DEATH: Window{44b26fb8 pkg.MyTest/pkg.MyTest.MyTest_Activity paused=false}
09-02 23:41:05.124: DEBUG/dalvikvm(546): GC_EXPLICIT freed 147 objects / 6256 bytes in 69ms
09-02 23:41:10.134: DEBUG/dalvikvm(575): GC_EXPLICIT freed 336 objects / 13296 bytes in 75ms
09-02 23:40:24.524: INFO/ActivityManager(82): Config changed: { scale=1.0 imsi=450/8 loc=ko_KR touch=3 keys=1/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=65}
09-02 23:40:24.524: INFO/UsageStats(82): Unexpected resume of com.android.launcher while already resumed in com.android.launcher
09-02 23:40:24.724: VERBOSE/RenderScript_jni(163): surfaceDestroyed
APIDemo 에 있는 AlertDialog 를 참조해서.. 그냥 새로운 프로젝트에 이 코드만 넣어서 해봤습니다.
manifest 를 수정하지 않고도..그냥 잘되네요.. 그래서 제 코드에서 한 메서드씩 주석처리 하면서..
디버깅을 해 본 결과. onDestory 에서 dialog 선택 뒤에서 클래스 생성된거를 생성 여부를 확인안하고 close 한게 문제였네요.
즉, 다이알로그가 떠 있는 상태에서는 뒤에 코드들이 실행 안되어 있으니까..
그 상태로 onDestroy 가 실행되면.. 그 안의 코드들이 null 을 확인해주고..close 를 해야 하네요.
결국 가로로 전환될 때.. onDestroy 실행되고 다시 onCreate 실행된다는 얘기네요.
저는 그냥.. onCreate 만 다시 실행되는 줄 알았습니다.
그래서 해결은 했는데요..문제는... 가로로 전환될 때마다..새로 앱이 실행된다는게
오히려 불편한 것 같습니다..
한참...앱이 진행되고 있는데...뜬금없이 방향 바꿨다고.. 재시작해버리면..
사용자는 황당할 것 같거든요.
그래서. 방향 전환되는 시점을 캐취해서.. 앱 재시작을 취소하고 싶습니다.
앱 재시작을 취소하려면 어떻게 해야 될까... 다시 구글링 해봐야 겠어요.
댓글 감사합니다...




보통 "틀면 죽는다"의 케이스는 port 모드에서의 리소스는 다 있는데 land 모드에는 없다던지
혹은 그 반대이던지 이런케이스들이 가장 흔합니다.
다이얼로그 문제가 아닐수도 있습니다.
그 엑티비티의 레이아웃에 있는 어떤 뷰가 세로만 있고 가로는 없는데 그것을 감안하지 않았다던가
이런식때문에 죽을수 있습니다.