Toast总结二

来源:互联网 发布:韩国在线直播软件 编辑:程序博客网 时间:2024/04/28 20:27

上一篇我们说到了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来配合使用,足以搞定需求;

0 0
原创粉丝点击