在实现一个功能的时候,遇到了Toast一直不消失的问题,因此,对Toast进行了一些研究。

先描述问题:有一个activity和一个thread,都有各自的handler。activity启动thread,双方通过handler进行交互。当在thread中运行到某种情况,会弹出toast进行信息提示,若此时退出activity,会出现Toast一直不消失的情况,直到用户手动清理内存才会消失。

通过查找资料了解到,Toast在创建时有一个context参数,通常我们是将一个activity做为context参数传递进去的。若activity完全退出了,则Toast的工作环境异常,某些动作就不能实现了,例如hide()或者cancle()不能正常调用运行,表现出来就是提示信息不能自动消失。

调用Toast的show(),是将一个要显示的消息入了队列,调用cancel()即可取消。另外,Toast信息提示框在显示一定时间后也会自动关闭,是因为在调用show()方法后,将消息加入了系统的Toast队列。系统会依次从队列中取出一个Toast,并显示它。在显示一段时间后,再关闭,然后再显示下一个Toast信息提示框。直到Toast队列中所有Toast都显示完为止。

然而,我在thread的handler里面,在收到退出消息时,调用了Toast的cancel(),仍然不能解决问题。

后来想到一点:收到activity发出的退出消息时,是否已经有所滞后了,此时会不会activity已经被销毁了? 
基于这点考虑,我将消息的显示与cancel()都转移到activity中来实现,最终解决了问题。

通常我们调用Toast是这样做的,

最新文章

  1. [AlwaysOn Availability Groups]AG扩展事件
  2. Git入门教程
  3. CodeForces 689B Mike and Shortcuts (bfs or 最短路)
  4. WPF多线程演示
  5. js判断字符串是否包含指定的字符
  6. 用KMP算法实现strStr()
  7. mysql 学习心得1
  8. producer发布消息
  9. hibernate05--list和iterator
  10. win32之进程概念
  11. SpringBoot集成redis的LBS功能
  12. 【Alpha go】Day 2!
  13. spring 配置 线程池并使用 springtest 进行测试
  14. Lua中Table的学习
  15. JS - ECMAScript2015(ES6)新特性
  16. 从零开始搭建linux下laravel 5.5所需环境(三)
  17. VB 中定义FileSystemObject对象,要先添加对象
  18. js if和switch,==和===
  19. 【离散数学】 SDUT OJ 1.1联结词真值运算
  20. Linux-Ps命令使用

热门文章

  1. Python之面向对象和正则表达(代数运算和自动更正)
  2. [USACO06JAN]树林The Grove
  3. 将TUM数据集的RGB-D数据集转化为klg格式
  4. node中间件概念
  5. gcc and g++ 常用参数解释
  6. Go外包 Go语言外包 Golang外包商 浅谈Go的全局变量和生命周期
  7. 在DataFrame数据表里面提取需要的行
  8. homework 张一刚
  9. 迅速的说清楚rpc原理
  10. 基于fastadmin快速搭建后台管理