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-07-10 16:56:42

    mysql in 排序 也可以按in里面的顺序来排序

    SQL: select * from table where id IN (3,6,9,1,2,5,8,7); 这样的情况取出来后,其实,id还是按1,2,3,4,5,6,7,8,9,排序的,但如果我们真要按IN里面的顺序排序怎么办?SQL能不能完成?是否需要取回来后再foreach一下?

  • 2018-08-02 15:03:28

    正则提取字段

    如下文案,如何提取中间的文案呢 eq: 我们的%%aaa%%不一致,哈哈哈 提取后是aaa

  • 2018-08-07 20:00:42

    xUtils3.0版本的发送同步网络请求的方式

    对于Android开发来说,基本都是用异步来从网络上请求数据,很少用到同步请求的。近日项目有个地方需要使用到同步请求(以我目前的知识储备来说好像只能用同步请求来解决这个问题了),去网上搜索相关资料,又没有找到什么明确的使用方法。所以记下来,以备不时之需。