Android7.1.1Toast问题记录

www.itboth.com/d/qIVZju/an…

Toast引起的windowManager.addView-->>badToken
这个问题由于targetSDKVersion升到26之后,在7.1.1机型上概率性出现。
稳定复现的步骤是,在Toast.show()之后,UI线程做了耗时的操作阻塞了Handler message的处理,如使用Thread.sleep(5000),然后这个崩溃就出现了。

原因是7.1.1系统对TYPE_TOAST的Window类型做了超时限制,绑定了Window Token,最长超时时间是3.5s,如果UI在这段时间内没有执行完,
Toast.show()内部的handler message得不到执行,NotificationManageService那端会把这个Toast取消掉,同时把Toast对于的window token置为无效。
等App端真正需要显示Toast时,因为window token已经失效,ViewRootImpl就抛出了上面的异常。
Android 8.0上面,google意识到这个bug,在Toast的内部加了try-catch保护。目前只有7.1.1上面的Toast存在这个问题,崩溃在系统源码里,App层也不好处理, 有其他好的解决方案,欢迎讨论

转载于:https://juejin.im/post/5c3467626fb9a049a979e1a7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值