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


  • 2018-03-14 17:41:44

    MySQL的if,case语句使用总结

    Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:

  • 2018-03-16 23:56:14

    layer-list -- layer-list的基本使用介绍

    简单理解,layer 是层,list 是列表,那么 layer-list 就是层列表的意思。但是,是什么层列表呢?? 其实 layer-list 是用来创建 LayerDrawable 的,LayerDrawable 是 DrawableResource 的一种, 所以,layer-list 创建出来的是 图层列表,也就是一个drawable 图形。

  • 2018-03-20 22:01:18

    Java如何进行Base64的编码(Encode)与解码(Decode)?

    Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。如果要使用Java 程式语言来实作Base64的编码与解码功能,可以参考本篇文章的作法。

  • 2018-03-20 23:38:05

    PHP中json_encode与json_decode

    json_encode() 对变量进行JSON编码,json_decode() 对JSON数据进行解码,转换为PHP变量

  • 2018-03-21 22:26:03

    Android BASE64Encoder不能用的问题

    昨天项目与后台交互的接口传参数需要加密,用的是BASE64Encoder加密,可是这个类不能用,谷歌了一下说的是:

  • 2018-03-21 22:28:02

    Java加密算法 AES

    AES 算法 对称加密,密码学中的高级加密标准 2005年成为有效标准