2013-09-26 50 views
1

我在我的應用中集成了zxing條碼掃描器。當掃描程序進行掃描時,它會獲取結果並通過異步任務搜索外部聯機數據庫,然後根據結果打開新的活動。我得到一個強制關閉,是不是一致的,它並沒有發生一次掃描,只是有時所以我有麻煩搞清楚爲什麼我收到一份泄露的窗口錯誤,並且有時只:android泄露窗口強制關閉

09-25 21:02:48.105 24371-24371/com.beerportfolio.beerportfoliopro E/WindowManager﹕ Activity com.example.beerportfoliopro.BeerPage2 has leaked window [email protected] that was originally added here 
     android.view.WindowLeaked: Activity com.example.beerportfoliopro.BeerPage2 has leaked window [email protected] that was originally added here 
     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:468) 
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:419) 
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:351) 
     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:171) 
     at android.view.Window$LocalWindowManager.addView(Window.java:558) 
     at android.app.Dialog.show(Dialog.java:282) 
     at com.example.beerportfoliopro.GetBeerRateJSON.onPreExecute(GetBeerRateJSON.java:52) 
     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
     at android.os.AsyncTask.execute(AsyncTask.java:534) 
     at com.example.beerportfoliopro.GetBeerDataJSON.onPostExecute(GetBeerDataJSON.java:111) 
     at com.example.beerportfoliopro.GetBeerDataJSON.onPostExecute(GetBeerDataJSON.java:34) 
     at android.os.AsyncTask.finish(AsyncTask.java:631) 
     at android.os.AsyncTask.access$600(AsyncTask.java:177) 
     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:155) 
     at android.app.ActivityThread.main(ActivityThread.java:5536) 
     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:1074) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841) 
     at dalvik.system.NativeStart.main(Native Method) 
09-25 21:02:48.265 24371-24371/com.beerportfolio.beerportfoliopro E/AndroidRuntime﹕ FATAL EXCEPTION: main 
     java.lang.IllegalArgumentException: View not attached to window manager 
     at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:784) 
     at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:476) 
     at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:182) 
     at android.app.Dialog.dismissDialog(Dialog.java:328) 
     at android.app.Dialog.dismiss(Dialog.java:311) 
     at com.example.beerportfoliopro.GetBeerRateJSON.onPostExecute(GetBeerRateJSON.java:74) 
     at com.example.beerportfoliopro.GetBeerRateJSON.onPostExecute(GetBeerRateJSON.java:27) 
     at android.os.AsyncTask.finish(AsyncTask.java:631) 
     at android.os.AsyncTask.access$600(AsyncTask.java:177) 
     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:155) 
     at android.app.ActivityThread.main(ActivityThread.java:5536) 
     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:1074) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841) 
     at dalvik.system.NativeStart.main(Native Method) 

回答

2

從棧跟蹤,看起來DialogAsyncTask完成工作時不可見。在這種情況下,致電dismiss()將使應用程序崩潰。

您可以嘗試使用Dialog.isShowing()避免碰撞:

protected void onPostExecute(...) { 
    ... 
    if (dialog.isShowing()) { 
     dialog.dismiss(); // or .cancel() 
    } 
    ... 
}