解決Android中Can't create handle inside thread問題

來源:互聯網
上載者:User

[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就可以實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.