ProgressDialog在ApiDemo中:
在onCreateProgressDialog執行初始化創建
在OnPrepareProgressDialog執行後臺操作
但是在實際過程中,可能會發現在handler中執行dialog.dismiss之後對話框沒有消失,但是實際上子線程消息已經發送成功.
遇到這樣的情況不妨試試下面的方法:
主要採用了定義2個Progressdialog分別指向開啓進程框和關閉進程框,並且使用單例的方式提供進程框對象.
@Override protected Dialog onCreateDialog(int id) { switch (id) { case StaticUtils.PROGRESS_LOADING: { if (loadingDialog!=null) { return loadingDialog; } loadingDialog = new ProgressDialog(this); loadingDialog.setTitle("歸屬地服務"); loadingDialog.setMessage("正在加載資源請稍後"); loadingDialog.setIndeterminate(true); loadingDialog.setCancelable(true); return loadingDialog; } case StaticUtils.PROGRESS_CLEANING: { if (cleaningDialog!=null) { return cleaningDialog; } cleaningDialog = new ProgressDialog(this); cleaningDialog.setTitle("歸屬地服務"); cleaningDialog.setMessage("正在關閉資源請稍後"); cleaningDialog.setIndeterminate(true); cleaningDialog.setCancelable(true); return cleaningDialog; } } return null; } @Override @Deprecated protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(id, dialog); switch (id) { case StaticUtils.PROGRESS_LOADING:// 加載資源 Logger.i(getPackageName(), "加載資源子線程開啓"); new Thread(new Runnable() { @Override public void run() { prepareCallerlocDatabase(); // 將資源拷貝到 handler.sendEmptyMessage(StaticUtils.PROGRESS_LOADING_COMPLETE); } }).start(); break; case StaticUtils.PROGRESS_CLEANING:// 刪除資源 new Thread(new Runnable() { @Override public void run() { // 刪除資源 FileUtils.deleteFile(getDatabasePath( StaticUtils.ASSET_DB_ADDRESS).getPath()); Logger.i(getPackageName(), "刪除資源完畢"); handler.sendEmptyMessage(StaticUtils.PROGRESS_CLEANING_COMPLETE); } }).start(); break; default: break; } }
在hanlder中可以對其dismiss操作
this.handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { // 加載歸屬地數據庫資源完畢 case StaticUtils.PROGRESS_LOADING_COMPLETE:{ Logger.i(getPackageName(), "收到加載資源完畢消息"); loadingDialog.dismiss(); break; } case StaticUtils.PROGRESS_CLEANING_COMPLETE:{ Logger.i(getPackageName(), "收到清除資源完畢消息"); cleaningDialog.dismiss(); break; } default: break; } } };