分享

Android中Toast如何在子线程中调用

 liuys_360 2019-10-23

Android中Toast如何在子线程中调用

在我们编写程序的时候,碰到过很多次的想要在子线程中调用Toast,这时候程序编译没有问题,当我们开始运行在手机上的时候就会出现下列出错。

从这个错误中,我们可以看到, 是因为一个Looper对象的原因, 当然很多人是不看这个报错信息的,因为大部分android程序员都认为Toast是一个ui控件,需要在主ui线程中操作才可以。。。(我了解的从事一两年开发经验的人也是这么理解的)

下面分析一下Toast在主线程与子线程运行的缺失项:

android的主ui线程中其android框架已经默认给出了一个looper对象, 而我们自己创建的子线程中,looper对象需要自己给构建出来。这也就是为什么我们在子线程中使用Toast的时候会报出上图异常。。(如果不明白Toast为什么在子线程使用需要Looper对象的可自己观察源码)

解决方案:

既然已经知道了问题是如何产生的, 那么我们现在就只需要在我们的子线程中把Toast所需要的Looper对象给创建出来就可以了。

[java] view plain copy

  1. new Thread(new Runnable() {  

  2.                     @Override  

  3.                     public void run() {  

  4.                         Looper.prepare();  

  5.                         Toast.makeText(TwoActivity.this, "子线程显示", Toast.LENGTH_SHORT).show();  

  6.                         Looper.loop();  

  7.                     }  

  8.                 }).start();  

  1. new Thread(new Runnable() {

  2. @Override

  3. public void run() {

  4. Looper.prepare();

  5. Toast.makeText(TwoActivity.this, "子线程显示", Toast.LENGTH_SHORT).show();

  6. Looper.loop();

  7. }

  8. }).start();

我们已经给子线程里面创建了一个Looper对象,这样我们的Toast就可以加入到一个消息队列中,才能够进行输出!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多