歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 解決Android中Cant create handle inside thread問題

解決Android中Cant create handle inside thread問題

日期:2017/3/1 11:08:20   编辑:Linux編程

解決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(this, 100);
  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(this, 100);
  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