解决Android中Can't 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也是一种线程,相当于一个定时触发某一事件一样。

相关内容