2013-10-08 4 views
0

지연된 대화 상자를 표시하는 처리기로 끝나는 앱이 있습니다. 이것은 몇 초 후에 대화 상자의 지연된 게시물을 만드는 것입니다.작업이 완료되기 전에 처리기가 닫히지 않습니까?

android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
at android.view.ViewRootImpl.setView(ViewRootImpl.java:567) 
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246) 
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
at android.app.Dialog.show(Dialog.java:281) 
at victor.martin.syncro.Finish$1.run(Finish.java:85) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5227) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
at dalvik.system.NativeStart.main(Native Method) 

내가 핸들러가 완료되기 전에 앱이 종료 때문이라고 생각 : 내 문제는 그것이 로그 캣 나에게 다음 오류를 보여주는 것입니다.

이것은 코드입니다. 어떻게해야합니까?

private Runnable alertDialog = new Runnable() { 
    public void run() { 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Finish.this); 

    // set the title of the Alert Dialog 
alertDialogBuilder.setTitle(getResources().getString(R.string.rebootTitleAlert)); 

    // set dialog message 
    alertDialogBuilder.setMessage(getResources().getString(R.string.rebootMessageAlert)).setCancelable(false).setPositiveButton(getResources().getString(R.string.rebootButtonAlert),new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      RootTools.restartAndroid(); 
      Finish.this.finish(); 
     } 
    }).setNegativeButton(getResources().getString(R.string.laterButtonAlert), new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.cancel(); 
      Finish.this.finish(); 
     } 
    }); 

AlertDialog alertDialog = alertDialogBuilder.create(); 

    alertDialog.show(); 

    } 
}; 

어떻게 해결할 수 있습니까?

답변

1

대화 상자를 표시하기 전에 활동이 있는지 확인할 수 있습니다.

대화 상자가 활동에 첨부하려고 시도했지만 활동을 더 이상 사용할 수 없으면 오류가 발생합니다.

3

옵션 1 : onStop()에서 실행 파일을 제거하십시오.

옵션 2 : 실행 메소드에서 isFinishing() 호출로 활동이 완료되었는지 확인하고, 반환하면 아무 것도하지 않습니다.

0

나는 Dong Xiabin의 해결책으로 이미 문제를 해결했다고 생각한다.

@Override 
protected void onStop() { 
    // TODO Auto-generated method stub 
    super.onStop(); 
    // Stop the handler before finish the activity. 
    alertDialogHandler.removeCallbacks(alertDialog); 
} 

고맙지 만 그래도 나는 괜찮은지 확신 할 수 없습니다. 나는 의견을 수락한다.

관련 문제