Android 测试日常积累

1、关于7.1.1的BadTokenException问题

https://segmentfault.com/q/1010000012340763/a-1020000012381614

这个问题由于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层也不好处理, 有其他好的解决方案,欢迎讨论

2、关于android.app.RemoteServiceException问题

错误 android.app.RemoteServiceException:Context.startForegroundService() did not then call Service.startForeground()

https://stackoverflow.com/questions/44425584/context-startforegroundservice-did-not-then-call-service-startforeground

云阅读tatgetSDKVersion升级到了26之后,内测时发现在8.0和8.1的设备上可能会出现的crash。Android 8.0 O系统增加后台运行的应用对后台服务的访问限制,也就是后台应用不可以启动后台服务。Android 8.0引入了一个新的方法,Context.startForegroundService(),以在前台启动新服务。新的 Context.startForegroundService() 函数可以启动一个前台服务。即使应用在后台运行,系统也允许其调用 Context.startForegroundService()。不过,应用必须在创建服务后的五秒内调用该服务的 startForeground() 函数。如果五秒内没有调用startForegroundService() 方法的话,就会Crash。
该问题参考stackoverflow上的解决方法,我们在service OnCreate和onHandle的时候都执行startForeground()方法。在一定程度上减少了crash的发生。如果想彻底解决问题的话,需要改为job service。

3、关于Android Webview的shouldOverrideUrlLoading方法

结论:
若没有设置 WebViewClient 则由系统(Activity Manager)处理该 url,通常是使用浏览器打开或弹出浏览器选择对话框。
若设置 WebViewClient 且该方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理,也就是程序员自己做处理。 (也就是说设置返回true的话,点击跳转的话是不处理的,没有响应的。)
若设置 WebViewClient 且该方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。

比较全面的解析,详细看:https://www.aliyun.com/jiaocheng/16350.html

4、Android Studio项目报错:Failed to resolve: monitor

解决方法参考:https://stackoverflow.com/questions/52965571/android-project-update-and-how-to-solve-failed-to-resolve-monitor

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 前言 在之前的图解Handler原理最后留下了几个课后题,如果还没看过那篇文章的,建议先看那篇文章,课后题如...
    唐江旭阅读 5,987评论 5 45
  • 【Android Handler 消息机制】 前言 在Android开发中,我们都知道不能在主线程中执行耗时的任务...
    Rtia阅读 4,897评论 1 28
  • 从知道成绩的那一刻之前,我的心就开始莫名的紧张,我有一种不祥的预感,当时正在爸爸的饭店里,在上午成绩出来之前我一直...
    存在morning阅读 405评论 5 4
  • 上一期跟小伙伴们探讨了为什么潮汕女孩不外嫁, 有人觉得不平,就是这种偏见扼杀了他们的爱情; 是的,从小到大,我见证...
    木_拾音阅读 1,909评论 0 1
  • Media Queries Media Queries是CSS3新增加的一个模块功能,其最大的特色就是通过CSS3...
    Mandy_jin阅读 1,146评论 0 0