Android在非UI线程中显示Toast_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Android在非UI线程中显示Toast

Android在非UI线程中显示Toast

 2013/9/7 21:12:09  king_tt  程序员俱乐部  我要评论(0)
  • 摘要:publicvoidshowToast(Stringmsg){Looper.prepare();Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show();Looper.loop();}只需要加上那两句就能在非UI线程中显示ToastToast里面的show()publicvoidshow(){...service.enqueueToast(pkg,tn,mDuration);//把这个toast插入到一个队列里面
  • 标签:android 线程
class="java">public void showToast(String msg){
		Looper.prepare();
		Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
		Looper.loop();
	}

只需要加上那两句就能在非UI线程中显示Toast

?

Toast里面的show()
    public void show() {
      ...
        service.enqueueToast(pkg, tn, mDuration);   //把这个toast插入到一个队列里面
        ...
    }

?

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 显示需要出现在一个线程的消息队列中.... 很隐蔽

发表评论
用户名: 匿名