上一篇我们说到了Toast的基本应用的代码实现,下面我们来说下它在线程中的使用;
大家都知道和UI显示相关的都应该在UI线程上执行(也就是主线程);
那么如果想监听子线程来显示Toast我们可以用Handler来实现,当子线程执行完后,调用mHandler.sendMessage(msg);来通知主线程执行Toast显示;
在主线程中的代码:
- private final Handler mHandler = new Handler(){
- public void handleMessage(Message msg) {
- switch (msg.arg1) {
- case “1”:
- Toast.makeText(getApplicationContext(),"显示toast",Toast.LENGTH_SHORT).show();
- break;
- default:
- break;
- }
- }
- };
- Message msg = mHandler.obtainMessage();
- msg.arg1 = “1”;
- mHandler.sendMessage(msg);
Can’t create handler inside thread that has not calledLooper.prepare();
其实这个报错网上一查就能知道是在非UI线程实现UI显示;
如果不用上面说的Handle,还可以用下面的代码来实现:
- final Thread mThread = new Thread(new Runnable() {
- @Override
- public void run()
- {
- Looper.prepare();
- Toast.makeText(getApplicationContext(), "显示toast",
- Toast.LENGTH_SHORT).show();
- Looper.loop();
- }
- });
- mThread.start();