问题描述:有时在非ui线程中处理数据遇到异常或者重要信息时,需要提示用户,toast是一个很好的选择,但是在非ui线程中不能直接使用Toast,根据网络资料,在调用Toast的地方前后分别加上Looper.prepare()和Looper.loop(),此方法可以实现Toast的显示,但是在发现该代码快之后的代码却能执行。
问题原因:Looper制造的是一个死循环,而我并没有退出该循环的出口,之后的代码自然就不会执行。
解决方案:要解决该问题,可以在Looper.loop()之前加上Looper.myLoop.quet()方法,使得在执行完toast后可以退出循环。
此方法虽然可以解决我现有的问题,但是我们在关于ui操作的代码应尽量放在ui线程中去调用,避免产生其他的问题。所有我最终的解决方案是将该toast提示代码移动到ui线程中执行。