A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© linxy06 中级黑马   /  2015-11-29 11:20  /  784 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[java] view plaincopy
public void showToast(String msg){  
        Looper.prepare();  
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();  
        Looper.loop();  
    }  
只需要加上那两句就能在非UI线程中显示Toast
[java] view plaincopy
Toast里面的show()  
    public void show() {  
      ...  
        service.enqueueToast(pkg, tn, mDuration);   //把这个toast插入到一个队列里面  
        ...  
    }  

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

1 个回复

倒序浏览
楼主,找对楼再进哟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马