Android中Toast如何在子线程中调用
2016-03-30 13:31
387 查看
(转载)http://blog.csdn.net/qq_28725503/article/details/50763028
在我们编写程序的时候,碰到过很多次的想要在子线程中调用Toast,这时候程序编译没有问题,当我们开始运行在手机上的时候就会出现下列出错。
![](https://img-blog.csdn.net/20160229084827855?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
从这个错误中,我们可以看到, 是因为一个Looper对象的原因, 当然很多人是不看这个报错信息的,因为大部分android程序员都认为Toast是一个ui控件,需要在主ui线程中操作才可以。。。(我了解的从事一两年开发经验的人也是这么理解的)
下面分析一下Toast在主线程与子线程运行的缺失项:
android的主ui线程中其android框架已经默认给出了一个looper对象, 而我们自己创建的子线程中,looper对象需要自己给构建出来。这也就是为什么我们在子线程中使用Toast的时候会报出上图异常。。(如果不明白Toast为什么在子线程使用需要Looper对象的可自己观察源码)
既然已经知道了问题是如何产生的, 那么我们现在就只需要在我们的子线程中把Toast所需要的Looper对象给创建出来就可以了。
[java] view
plain copy
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(TwoActivity.this, "子线程显示", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}).start();
我们已经给子线程里面创建了一个Looper对象,这样我们的Toast就可以加入到一个消息队列中,才能够进行输出!!
Android中Toast如何在子线程中调用
在我们编写程序的时候,碰到过很多次的想要在子线程中调用Toast,这时候程序编译没有问题,当我们开始运行在手机上的时候就会出现下列出错。从这个错误中,我们可以看到, 是因为一个Looper对象的原因, 当然很多人是不看这个报错信息的,因为大部分android程序员都认为Toast是一个ui控件,需要在主ui线程中操作才可以。。。(我了解的从事一两年开发经验的人也是这么理解的)
下面分析一下Toast在主线程与子线程运行的缺失项:
android的主ui线程中其android框架已经默认给出了一个looper对象, 而我们自己创建的子线程中,looper对象需要自己给构建出来。这也就是为什么我们在子线程中使用Toast的时候会报出上图异常。。(如果不明白Toast为什么在子线程使用需要Looper对象的可自己观察源码)
解决方案:
既然已经知道了问题是如何产生的, 那么我们现在就只需要在我们的子线程中把Toast所需要的Looper对象给创建出来就可以了。[java] view
plain copy
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(TwoActivity.this, "子线程显示", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}).start();
我们已经给子线程里面创建了一个Looper对象,这样我们的Toast就可以加入到一个消息队列中,才能够进行输出!!
简单!
已完结!
相关文章推荐
- Android中使用Xutils库上传图片
- android中Handler源码的分析文章
- Android学习之使用Comparable或Comparator比较和排序元素
- android自定义view-打造圆形ImageView(二)
- Android 新闻客户端的学习
- Android开发笔记(五)
- Android开发笔记(四)
- Android开发笔记(三)
- 关于android.mk文件的作用、语法和自动添加源文件的学习
- android TextView 改变颜色
- [转载]android工程中引入另一个工程中的资源
- Exception_android_java.lang.NoClassDefFoundError
- 使用Android Studio的Live Templates——实现用少量的代码写出更多的代码
- Android-Tips(实用Android开发技巧)
- android相关权限
- Android_ _开发技巧总结
- android studio遇到的一些问题和解决方案(Mac版)
- Android提升篇系列:Android项目代码优化实践
- Android RSA加密解密算法解析
- Android比DES加密更安全的算法——3DES加密算法