2014-03-03 61 views
2

我正在線程中實現進度對話框。它可以在橫向或縱向模式下正常工作。 但是,當設備旋轉的應用程序崩潰,並給出以下異常:屏幕上的應用程序崩潰旋轉

我androidMainfest.xml

<activity 
     android:name="and.androidrest.Myactivity" 
     android:label="@string/app_name" 
     android:launchMode="standard" > 

我的活動代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sax_parser); 
    callDialog(); 
} 
public void callDialog(){ 
    progressDialog = new ProgressDialog(this); 
    progressDialog.setTitle("Please wait.."); 
    progressDialog.setCancelable(false); 
    progressDialog.setMessage("Loading..."); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    progressDialog.show(); 


    new Thread(new Runnable(){ 
     public void run(){ 
      try{ 
       Thread.sleep(2000);   
      } 
      catch (Exception e){ 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      if(progressDialog != null){ 
       try{ 
        progressDialog.dismiss(); 
        progressDialog=null; 
       } 
       catch(Exception e) { 
        e.printStackTrace(); 
       }   
      }    
     } 
    }).start();  
} 

這裏是我的logcat:

03-04 09:54:53.825: E/WindowManager(1309): Activity com.example.emailsending.SaxParserActivity has leaked window [email protected] that was originally added here 
03-04 09:54:53.825: E/WindowManager(1309): android.view.WindowLeaked: Activity com.example.emailsending.SaxParserActivity has leaked window [email protected] that was originally added here 
03-04 09:54:53.825: E/WindowManager(1309): at android.view.ViewRoot.<init>(ViewRoot.java:258) 
03-04 09:54:53.825: E/WindowManager(1309): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
03-04 09:54:53.825: E/WindowManager(1309): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
03-04 09:54:53.825: E/WindowManager(1309): at android.view.Window$LocalWindowManager.addView(Window.java:424) 
03-04 09:54:53.825: E/WindowManager(1309): at android.app.Dialog.show(Dialog.java:241) 
03-04 09:54:53.825: E/WindowManager(1309): at com.example.emailsending.SaxParserActivity.callDialog(SaxParserActivity.java:157) 
03-04 09:54:53.825: E/WindowManager(1309): at com.example.emailsending.SaxParserActivity.onCreate(SaxParserActivity.java:52) 
03-04 09:54:53.825: E/WindowManager(1309): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-04 09:54:53.825: E/WindowManager(1309): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
03-04 09:54:53.825: E/WindowManager(1309): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
03-04 09:54:53.825: E/WindowManager(1309): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
03-04 09:54:53.825: E/WindowManager(1309): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
03-04 09:54:53.825: E/WindowManager(1309): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-04 09:54:53.825: E/WindowManager(1309): at android.os.Looper.loop(Looper.java:123) 
03-04 09:54:53.825: E/WindowManager(1309): at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-04 09:54:53.825: E/WindowManager(1309): at java.lang.reflect.Method.invokeNative(Native Method) 
03-04 09:54:53.825: E/WindowManager(1309): at java.lang.reflect.Method.invoke(Method.java:507) 
03-04 09:54:53.825: E/WindowManager(1309): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-04 09:54:53.825: E/WindowManager(1309): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-04 09:54:53.825: E/WindowManager(1309): at dalvik.system.NativeStart.main(Native Method) 
03-04 09:54:53.906: D/dalvikvm(1309): GC_EXTERNAL_ALLOC freed 107K, 52% free 2616K/5379K, external 910K/1038K, paused 66ms 
03-04 09:54:53.995: D/AndroidRuntime(1309): Shutting down VM 
03-04 09:54:53.995: W/dalvikvm(1309): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
03-04 09:54:54.005: E/AndroidRuntime(1309): FATAL EXCEPTION: main 
03-04 09:54:54.005: E/AndroidRuntime(1309): java.lang.IllegalArgumentException: View not attached to window manager 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.view.Window$LocalWindowManager.removeView(Window.java:432) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.app.Dialog.dismissDialog(Dialog.java:278) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.app.Dialog.access$000(Dialog.java:71) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.app.Dialog$1.run(Dialog.java:111) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.os.Handler.handleCallback(Handler.java:587) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.os.Looper.loop(Looper.java:123) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-04 09:54:54.005: E/AndroidRuntime(1309):  at dalvik.system.NativeStart.main(Native Method) 

how ca我解決這個問題?

+6

是非常有用的張貼logcat的也 – nikis

+1

'android:configChanges =「orientation | screenLayout' - 除非你真的**明白爲什麼這是一個黑客行爲,爲什麼你不應該這樣做,你應該閱讀活動生命週期文檔以及如何以及何時使用onResume() ,onPause(),onStop()和其他生命週期方法,如果你不明白,那麼你所要做的就是隱藏錯誤,因爲你沒有正確使用這些方法。 – Simon

回答

1

您在活動中使用進度dailog。所以,當你旋轉手機,那麼它會拋出異常leakwindow。對於您需要dissmiss在旋轉時間進度......

使用,這將解決您的問題

@Override 
public void onPause() 
{ 
    super.onPause(); 

    if(progressDialog != null) 
    { 
     progressDialog.dismiss(); 
    } 

} 
相關問題