Toast总结二

本文介绍了如何在Android子线程中正确显示Toast消息。通过使用Handler机制或Looper.prepare()方法,可以实现在非UI线程中更新UI,避免了因尝试直接在子线程中调用UI组件而引发的错误。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值