展会信息港展会大全

Android在非UI线程中显示Toast
来源:互联网   发布日期:2015-10-03 11:19:47   浏览:1659次  

导读:[java] 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...

[java]

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]

Toast里面的show()

public void show() {

...

service.enqueueToast(pkg, tn, mDuration);//把这个toast插入到一个队列里面

...

}

Toast里面的show()

public void show() {

...

service.enqueueToast(pkg, tn, mDuration);//把这个toast插入到一个队列里面

...

}

[java]

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();

}

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();

}

总结下:Toast 显示的必要条件:

1:Toast 显示需要出现在一个线程的消息队列中.... 很隐蔽

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港