解決Android中Can't create handle inside thread問題,在
- new Thread()
- {
- public void run()
- {
- .....
- }
- }.start();
如果在裡面創建一個Dialog的話會出現這樣的錯誤,所以改用message形式的
- 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);
- }
其中
- showStatusDialog(status);
是定義Dialog的方法。
這種發送message的方式模型如下
- {
- 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);
- }
然後在其他某處調用
- mHandler.removeCallbacks(mRunnable);
就可取消此message的發送。
其實這裡發送message也是一種線程,相當於一個定時觸發某一事件一樣。