Android开发之在子线程中使用Toast
来源:互联网 发布:知乎日报源码 编辑:程序博客网 时间:2024/06/05 14:42
在子线程中使用Toast的时候,出现Force close。
错误提示:Can't create handler inside thread that has not called Looper.prepare()
解决方法:
在Toast.makeText().show()方法前面添加Looper.prepare();
在Toast.makeText().Show()方法后面添加Loop.loop();
原因:
子线程只是一个普通的线程,其ThreadLoacl中没有设置过Looper,所以会抛出异常。
因为Toast在创建的时候会依赖于一个Handler,并且一个Handler是需要有一个Looper才能够创建,而普通的线程是不会自动去创建一个Looper对象,比如说在某个Activity中能new一个Handler是因为Android系统在启动一个Activity的时候会默认的创建一个Looper对象,因此不能够在子线程中显示Toast,你可以在开启的子线程中执行Looper.prepare()来构建一个Looper,然后在显示Toast,但是不要忘记执行Looper.loop()来加载这个Looper,当然,也可以使用主线程的Looper,获取主线程的Looper的方法是Looper.getMainLooper();同时需要注意的是,同样的不能在子线程中去更新UI界面,因为Toast是相对独立于UI界面的,就好比应用虽然crash掉了,并且已经返回到home界面,但是Toast依然会在hone界面显示出来。
Runnable uploadImageRunnable = new Runnable() { @Override public void run() { if(TextUtils.isEmpty(imgUrl)){ Looper.prepare(); Toast.makeText(mContext, "还没有设置上传服务器的路径!", Toast.LENGTH_SHORT).show(); Looper.loop(); return; }
}
0 0
- Android开发之在子线程中使用Toast
- Android Toast在子线程中为什么无法正常使用
- android 在子线程中使用Toast等功能
- Android开发之——子线程中使用Toast或者更新UI
- Android在子线程使用Toast
- Android 子线程中使用Toast
- 在子线程中Toast
- 在子线程中Toast
- 子线程中使用Toast
- Android中Toast如何在子线程中调用
- Android中Toast如何在子线程中调用
- Android中Toast如何在子线程中调用
- 安卓在子线程中使用使用Toast
- Android 之 子线程中创建子线程以及子线程中toast 问题
- Android-在子线程中显示Toast和Dialog
- Android代码里Toast如何在子线程中调用
- 可在子线程中使用的Toast
- Toast 在子线程中使用的问题
- knn识别字母
- 和日期有关的类、Math类、Random类
- echo print() print_r() var_dump()的区别
- 在Latex中,我向看看我的宏是如何展开的,咋办?
- Ajax全接触(笔记)
- Android开发之在子线程中使用Toast
- HDU ACM 11 2084 数塔、水题
- Kotlin学习笔记之基础语法一
- 面向使用的软件开发方法:使用、可用性及用户界面
- Atiti attilax主要成果与解决方案与案例rsm版 v2
- 【玲珑杯 1054】【暴力+枚举约数】String cut
- Atitit vod click event design flow 视频点播系统点击事件文档
- opencv 分水岭算法
- atitit.vod search doc.doc 点播系统搜索功能设计文档