Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 解決Android中Can't create handle inside thread問題

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

編輯:關於Android編程

[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就可以實現
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved