我有一堆其中獲取數據AsyncTasks的。他們通過顯示對話框來更新進度。有時這會導致應用程序在後臺(不可見)時崩潰。我的代碼在下面調用。我可以做什麼檢查以防止應用程序崩潰,而無需完全重新設置對話框?從背景使用對話框崩潰的應用程序
這些在DownloadAsyncTask的聲明,並通過在構造
protected ProgressDialog mDialog;
protected String mDialogMessage = "Loading Data";
protected ProgressBar progBar;
doInBackground() {
if (mProgressBar != null && mProgressBar.getVisibility() == View.INVISIBLE) {
mUIThreadHandler.post(new Runnable() {
@Override
public void run() {
mProgressBar.setVisibility(View.VISIBLE);
}
});
} else if (mDialog != null && !mDialog.isShowing()) {
mUIThreadHandler.post(new Runnable() {
@Override
public void run() {
mDialog.setMessage(mDialogMessage);
mDialog.show();
}
});
}
}
然後onPostExecute()
:
@Override
protected void onPostExecute(DefaultHandler handler) {
super.onPostExecute(handler);
if (progBar != null && progBar.getVisibility() == View.VISIBLE) {
progBar.setVisibility(View.INVISIBLE);
} else if (mDialog != null && mDialog.isShowing()) {
try {
mDialog.dismiss();
} catch (Exception e) {
}
}
}
修訂崩潰日誌:
12-20 15:19:15.802 :E/AndroidRuntime(9529):
android.view.WindowManager $壞TokenException:無法添加窗口 - 令牌[email protected]無效;您的活動 正在運行? 12-20 15:19:15.802:E/AndroidRuntime(9529):在 android.view.ViewRootImpl.setView(ViewRootImpl.java:567)12-20 15:19:15.802:E/AndroidRuntime(9529):在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246) 12-20 15:19:15.802:E/AndroidRuntime(9529):在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 12 -20 15:19:15.802:E/AndroidRuntime(9529):at android.app.Dialog.show(Dialog.java:281)12-20 15:19:15.802: E/AndroidRuntime(9529):at 下載AsyncTask $ 2.run(DownloadAsyncTask.java:119)12-20 15:19:15.802:E/AndroidRuntime(9529):at android.os.Handler.handleCallback(Handler.java:725)12- 20 15:19:15.802:E/AndroidRuntime(9529):at android.os.Handler.dispatchMessage(Handler.java:92)12-20 15:19:15.802:E/AndroidRuntime(9529):at android .os.Looper.loop(Looper.java:137)12-20 15:19:15.802: E/AndroidRuntime(9529):at android.app.ActivityThread.main(ActivityThread.java:5039)12-20 15:19:15.802:E/AndroidRuntime(9529):在 java.lang.reflect.Method.invokeNative(Native Method)12-20 15:19:15.802:E/AndroidRuntime(9529):在 java.lang .reflect.Method.invoke(Method.java:511)12-20 15:19:15.802: E/AndroidRuntime(9529):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run
請發佈堆棧跟蹤,以顯示異常及其來源,以便我們能夠更好地告知您您做錯了什麼。 – CommonsWare
它並不經常發生。我沒有地方保存日誌文件... 119 –
線路是:@覆蓋 \t \t \t \t \t \t公共無效的run(){ \t \t \t \t \t \t \t mDialog.setMessage(mDialogMessage); \t \t \t \t \t mDialog.show(); \t \t \t \t \t \t –