회색님의 조언대로 SurfaceView에 새로운 다이얼로그 오브젝트를 생성시켜서 ok/cancel 다이얼로그를 띄우려고 했는데 해당 다이얼로그를 show()하는 위치(시점?)에 따라서 에러가 날때가 있습니다.

아래의 run()루프에서 doUpdate()가 프레임마다 게임을 구동하는 메소드입니다. 저 안에서 특정 이벤트에 (예, 게임이 끝났을 경우) Dialog의 show()를 호출하도록 하였습니다. 그런데 그 메소드가 호출됨과 동시에 에러가 뜨는군요.

@Override
        public void run() {
            while (mRun) {
                Canvas c = null;
                try {
                    synchronized (mSurfaceHolder) {                       
                        if (mTick == UPDATE_PERIOD) {                           
                            c = mSurfaceHolder.lockCanvas(null);
                            doUpdate();
                            doDraw(c);
                            mTick = 0;
                        } else {
                            mTick++;
                        }
                    }                   
                } finally {
                    if (c != null) {                   
                        mSurfaceHolder.unlockCanvasAndPost(c);
                    }
                }
            }           
        }

============================================================
에러가 나는 시점에 logcat으로 확인한 디버깅 메세지입니다.
============================================================
W/dalvikvm(  772): threadid=21: thread exiting with uncaught exception (group=0x
4000fe70)
E/AndroidRuntime(  772): Uncaught handler: thread Thread-11 exiting due to uncau
ght exception
E/AndroidRuntime(  772): java.lang.RuntimeException: Can't create handler inside
 thread that has not called Looper.prepare()
E/AndroidRuntime(  772):        at android.os.Handler.<init>(Handler.java:121)
E/AndroidRuntime(  772):        at android.view.ViewRoot.<init>(ViewRoot.java:19
2)
E/AndroidRuntime(  772):        at android.view.WindowManagerImpl.addView(Window
ManagerImpl.java:148)
E/AndroidRuntime(  772):        at android.view.WindowManagerImpl.addView(Window
ManagerImpl.java:91)
E/AndroidRuntime(  772):        at android.view.Window$LocalWindowManager.addVie
w(Window.java:392)
E/AndroidRuntime(  772):        at android.app.Dialog.show(Dialog.java:231)
E/AndroidRuntime(  772):        at com.myname.android.lunarlanderneo.lunarlanderneoVi
ew$Ext.actOnGameFinish(lunarlanderneoView.java:1019)
E/AndroidRuntime(  772):        at com.myname.android.lunarlanderneo.lunarlander.f
inishGame(JHGamePipe.java:599)
E/AndroidRuntime(  772):        at com.myname.android.lunarlanderneo.lunarlander.u
pdate(JHGamePipe.java:729)
E/AndroidRuntime(  772):        at com.myname.android.lunarlanderneo.lunarlanderneoVi
ew$lunarlanderneoThread.doUpdate(lunarlanderneoView.java:559)
E/AndroidRuntime(  772):        at com.myname.android.lunarlanderneo.lunarlanderneorVi
ew$lunarlanderneoThread.run(lunarlanderneoView.java:539)
I/Process (  569): Sending signal. PID: 772 SIG: 3
I/dalvikvm(  772): threadid=7: reacting to signal 3
I/dalvikvm(  772): Wrote stack trace to '/data/anr/traces.txt'
D/dalvikvm(  569): GC freed 11877 objects / 547240 bytes in 153ms
I/Process (  772): Sending signal. PID: 772 SIG: 9
I/WindowManager(  569): WIN DEATH: Window{4372f628 com.myname.android.lunarlanderneo/com.myname.android.lunarlanderneo.lunarlander paused=false}
I/ActivityManager(  569): Process com.myname.android.lunarlanderneo (pid 772) has
 died.
I/WindowManager(  569): WIN DEATH: Window{43730408 SurfaceView paused=false}
W/InputManagerService(  569): Got RemoteException sending setActive(false) notif
ication to pid 772 uid 10019


답변에 미리 감사 드립니다.