歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

解決Android中Cant create handle inside thread問題

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

  1. new Thread()  
  2. {  
  3.     public void run()  
  4.     {  
  5.              .....  
  6.      }  
  7. }.start();  
如果在裡面創建一個Dialog的話會出現這樣的錯誤,所以改用message形式的
  1. private void showStatusDialogThread() {  
  2.         mHandler = new Handler() {  
  3.             @Override  
  4.             public void handleMessage(Message msg) {  
  5.                 if (status != null) {  
  6.                     if (status.equals(SyncStatus.Success)) {  
  7.                         // 更新本地保存的lastSyncTime為當前時間   
  8.                         UpdateLocalLastSyncTime(System.currentTimeMillis());  
  9.                     }  
  10.                     showStatusDialog(status);  
  11.                     mHandler.removeCallbacks(mRunnable);  
  12.                 }  
  13.                 super.handleMessage(msg);  
  14.             }  
  15.         };  
  16.         mRunnable = new Runnable() {  
  17.             @Override  
  18.             public void run() {  
  19.                 mHandler.postDelayed(this100);  
  20.                 Message message = new Message();  
  21.                 mHandler.sendMessage(message);  
  22.             }  
  23.         };  
  24.         mHandler.post(mRunnable);  
  25.     }  
其中
  1. showStatusDialog(status);  
是定義Dialog的方法。

這種發送message的方式模型如下

  1. {  
  2.         mHandler = new Handler() {  
  3.             @Override  
  4.             public void handleMessage(Message msg) {  
  5.                 //執行的具體方法,例如創建Dialog,計數等   
  6.                 super.handleMessage(msg);  
  7.             }  
  8.         };  
  9.         mRunnable = new Runnable() {  
  10.             @Override  
  11.             public void run() {  
  12.                 //設置延遲時間間隔   
  13.                 mHandler.postDelayed(this100);  
  14.                 Message message = new Message();  
  15.                 mHandler.sendMessage(message);  
  16.             }  
  17.         };  
  18.         mHandler.post(mRunnable);  
  19.     }  
然後在其他某處調用
  1. mHandler.removeCallbacks(mRunnable);  
就可取消此message的發送。

其實這裡發送message也是一種線程,相當於一個定時觸發某一事件一樣。

Copyright © Linux教程網 All Rights Reserved