Android在thread中Toast不能显示问题解决

2018-01-26 01:05:22

有两种方法,我用第一种方法,软件假死了。所以不推荐。

第一种方法:

改写代码之前是:


[java] view plain copy

  1. Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show();  

改写之后:


[java] view plain copy

  1. Looper.prepare();  

  2. Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show();  

  3. Looper.loop();  


一般如果不是在主线程中又开启了新线程的话,一般都会碰到这个问题。

原因是在创建新线程的时候默认情况下不会去创建新的MessageQueue。


第二种方法:

[java] view plain copy

  1. Handler handler = new Handler() {  

  2.     @Override  

  3.     public void handleMessage(Message msg) {  

  4.         // TODO Auto-generated method stub  

  5.         if (msg.what == 0) {  

  6.             Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show();  

  7.         }  

  8.         super.handleMessage(msg);  

  9.     }  

  10.   

  11. };  

  12. Message msg = handler.obtainMessage();  

  13. msg.what = 0;  

  14. handler.sendMessage(msg);  






线程里面不能进行UI操作的,可以在线程里面用handler发送信息,然后再显示UI,比如就把你的toast改成handler.sendEmptyMessage()。。


  • 2020-02-19 23:15:24

    PHP 闭包(Closure)

    闭包(Closure)又叫做匿名函数,也就是没有定义名字的函数。比如下面的例子:

  • 2020-02-19 23:26:58

    php array_pop 删除数组最后一个元素实例

    php array_pop函数将数组最后一个单元弹出(出栈),即删除数组的最后一个元素。本文章通过php实例向大家讲解array_pop函数的使用方法。

  • 2020-02-20 18:35:21

    Vue加载组件、动态加载组件的几种方式

    组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展。