首页 > 代码库 > Android在非UI线程中显示Toast
Android在非UI线程中显示Toast
[java] view plaincopyprint?
- public void showToast(String msg){
- Looper.prepare();
- Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
- Looper.loop();
- }
public void showToast(String msg){ Looper.prepare(); Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); Looper.loop(); }
只需要加上那两句就能在非UI线程中显示Toast
[java] view plaincopyprint?
- Toast里面的show()
- public void show() {
- ...
- service.enqueueToast(pkg, tn, mDuration); //把这个toast插入到一个队列里面
- ...
- }
Toast里面的show() public void show() { ... service.enqueueToast(pkg, tn, mDuration); //把这个toast插入到一个队列里面 ... }
[java] view plaincopyprint?
- Looper
- public static final void prepare() {
- if (sThreadLocal.get() != null) {
- throw new RuntimeException("Only one Looper may be created per thread");
- }
- sThreadLocal.set(new Looper()); //在当前线程中创建一个Looper
- }
- private Looper() {
- mQueue = new MessageQueue(); //关键在这,创建Looper都干了什么。 其实是创建了消息队列
- mRun = true;
- mThread = Thread.currentThread();
- }
Looperpublic static final void prepare() { if (sThreadLocal.get() != null) { throw new RuntimeException("Only one Looper may be created per thread"); } sThreadLocal.set(new Looper()); //在当前线程中创建一个Looper }private Looper() { mQueue = new MessageQueue(); //关键在这,创建Looper都干了什么。 其实是创建了消息队列 mRun = true; mThread = Thread.currentThread(); }
总结下:Toast 显示的必要条件:
1:Toast 显示需要出现在一个线程的消息队列中.... 很隐蔽
转载于:http://blog.csdn.net/xiaanming/article/details/8904645
Android在非UI线程中显示Toast
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。