[java] new Thread() { public void run() { ..... } }.start(); 如果在上述代碼中省略符號處面建立一個Dialog的話會出現Can't create handle inside thread這樣的錯誤,所以改用下述message形式的,下述是一個開發項目中具體的例子。[java] private void showStatusDialogThread() { mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (status != null) { if (status.equals(SyncStatus.Success)) { // 更新本地儲存的lastSyncTime為目前時間 UpdateLocalLastSyncTime(System.currentTimeMillis()); } showStatusDialog(status); mHandler.removeCallbacks(mRunnable); } super.handleMessage(msg); } }; mRunnable = new Runnable() { @Override public void run() { mHandler.postDelayed(this, 100); Message message = new Message(); mHandler.sendMessage(message); } }; mHandler.post(mRunnable); } 其中[java] showStatusDialog(status); 是調用一個顯示Dialog的自訂的方法。這種發送message的方式模型抽取出來就是下面的形式:[java] { mHandler = new Handler() { @Override public void handleMessage(Message msg) { //執行的具體方法,例如建立Dialog,計數等 ...... super.handleMessage(msg); } }; mRunnable = new Runnable() { @Override public void run() { //設定延遲時間間隔 mHandler.postDelayed(this, 100); Message message = new Message(); mHandler.sendMessage(message); } }; mHandler.post(mRunnable); } 然後在其他某處調用[java] mHandler.removeCallbacks(mRunnable); 就可取消此message的發送。 其實這裡發送message也是一種線程,相當於設定一個定時器,每隔一段時間執行某些代碼一樣。 下面是這個用法的另一個寫法我覺的更簡單理解一些[java] Handler mHideHandler = new Handler(); Runnable mHideRunnable = new Runnable() { @Override public void run() { mSystemUiHider.hide(); } }; /** * Schedules a call to hide() in [delay] milliseconds, canceling any * previously scheduled calls. */ private void delayedHide(int delayMillis) { mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, delayMillis); } 只需要在主線程調用delayedHide就可以實現