Toast總結二

上一篇我們說到了Toast的基本應用的代碼實現,下面我們來說下它在線程中的使用;

大家都知道和UI顯示相關的都應該在UI線程上執行(也就是主線程);

那麼如果想監聽子線程來顯示Toast我們可以用Handler來實現,當子線程執行完後,調用mHandler.sendMessage(msg);來通知主線程執行Toast顯示;  

在主線程中的代碼:

  1. private final Handler mHandler = new Handler(){  
  2.         public void handleMessage(Message msg) {  
  3.                 switch (msg.arg1) {  
  4.                 case “1”:  
  5.            Toast.makeText(getApplicationContext(),"顯示toast",Toast.LENGTH_SHORT).show();  
  6.                         break;  
  7.                 default:  
  8.                         break;  
  9.                 }  
  10.         }  
  11. };  
在子線程中的代碼
  1. Message msg = mHandler.obtainMessage();  
  2. msg.arg1 = “1”;  
  3. mHandler.sendMessage(msg);  
如果有人直接在子線程中去執行Toast那麼肯定會報下面的錯誤

Can’t create handler inside thread that has not calledLooper.prepare();

其實這個報錯網上一查就能知道是在非UI線程實現UI顯示;

如果不用上面說的Handle,還可以用下面的代碼來實現:

  1. final Thread mThread = new Thread(new Runnable() {  
  2.         @Override  
  3.         public void run()  
  4.         {  
  5. Looper.prepare();   
  6. Toast.makeText(getApplicationContext(), "顯示toast"
  7. Toast.LENGTH_SHORT).show();
  8. Looper.loop(); 
  9.         }  
  10.     });  
  11. mThread.start();  

總結下:其實Toast的使用是在UI線程中,如果需要在子線程中去調用Toast,我覺得用Handle來配合使用,足以搞定需求;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章