【问题描述】

线上收到大量手机的崩溃异常,以华为手机为主,崩溃如下

1.Caused by: java.lang.IllegalStateException: The specified message queue synchronization barrier token has not been posted or has already been removed.

2.at android.os.MessageQueue.removeSyncBarrier(MessageQueue.java:600)

3.at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2822)

4.at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10653)

5.at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1394)

6.at android.view.Choreographer.doCallbacks(Choreographer.java:1115)

7.at android.view.Choreographer.doFrame(Choreographer.java:1004)

8.at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1362)

9.at android.os.Handler.handleCallback(Handler.java:966)

10.at android.os.Handler.dispatchMessage(Handler.java:110)

11.at android.os.Looper.loopOnce(Looper.java:205)

12.at android.os.Looper.loop(Looper.java:293)

13.at android.app.ActivityThread.main(ActivityThread.java:9596)

14.at java.lang.reflect.Method.invoke(Native Method)

15.at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)

16.at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204)

【问题分析】

对于“The specified message queue synchronization barrier token has not been posted or has already been removed.”

该问题主要为多线程绘制UI导致的,UI绘制过程会在MessageQueue中设置synchronization barrier ,结束时释放。其中barrier是Android Handler中的同步屏障,不了解的同学可以看下这篇文章Handler消息机制深入解析| EasyLiu (easyliu-ly.github.io)

【解决方案】

所以这行报错的意思是消息队列中的同步屏障没有被设置或者同步屏障已经被移除,view刷新时一般时是在绘制前插入屏障,绘制后移出屏障,如果多线程同时绘制UI就会导致线程安全问题,MessageQueue中的synchronization barrier 消息可能被另一个线程绘制完成时释放,导致原始线程走到barrier释放流程时,无法找到该消息,最终导致该crash发生。

安卓原生在高版本已经屏蔽了原来在子线程刷新UI会报错的特性,所以发生这种情况需要检查工程中是否有多线程刷新绘制UI的情况,和子线程刷新UI的情况,并非系统问题。

【HarmonyOS】关于 Caused by java.lang.IllegalStateException The specified...的更多相关文章

  1. Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError

    SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackO ...

  2. 【spring boot】【elasticsearch】spring boot整合elasticsearch,启动报错Caused by: java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8

    spring boot整合elasticsearch, 启动报错: Caused by: java.lang.IllegalStateException: availableProcessors ], ...

  3. Caused by: java.lang.IllegalStateException: Method has too many Body parameters

    feign多参数问题1.1GET方式错误写法 @RequestMapping(value="/test", method=RequestMethod.GET) Model test ...

  4. Caused by:java.lang.IllegalStateException at android.media.MediaPlayer._setDataSource(Native Method)

    使用Mediaplayer播放本地音频,在第二次调用mediaplayer.setDataSource()时报错如下: Caused by: java.lang.IllegalStateExcepti ...

  5. Caused by: java.lang.IllegalStateException: Expected raw type form of org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$Match

    spring 4.0.2,mybatis 3.2.6,aspectjweaver 1.8.10 使用的时候,报错: Caused by: java.lang.IllegalStateException ...

  6. Caused by java.lang.IllegalStateException Not allowed to start service Intent { cmp=com.x.x.x/.x.x.xService }: app is in background uid UidRecord(一)

    Caused by java.lang.IllegalStateException Not allowed to start service Intent { cmp=com.x.x.x/.x.x.x ...

  7. Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available

    java.lang.IllegalStateException: Failed to load ApplicationContext    at org.springframework.test.co ...

  8. Caused by: java.lang.IllegalStateException: duplicate key: datasource

    java.lang.IllegalStateException: Failed to load property source from location 'classpath:/applicatio ...

  9. Caused by: java.lang.IllegalStateException: Ambiguous mapping found

    Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map ‘myCockpitMgrControl ...

  10. Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/Cppcc] due to a StackOverflowError. Possible root causes include a too low setting for -Xs

    解决办法:(1)修改D:\Java\apache-tomcat-7.0.88\conf\catalina.properties (122line) (2)如org.apache.catalina.st ...

随机推荐

  1. OSM(OpenStreetMap)全球路网数据下载方式介绍

      本文对OpenStreetMap(OSM)网页与各类OSM数据的多种下载方式加以详细介绍,并对不同数据下载方式加以对比.   OSM数据包含道路与铁路路网.建筑.水体.土地利用.兴趣点.行政区边界 ...

  2. Service Mesh之Istio基础入门

    技术背景 分布式服务治理 所谓分布式服务治理就是对服务不断增长的复杂度的管控和管理:管控及管理包含网络拓扑变动.网络延时.通信安全.API网关.服务注册和发现.服务熔断容错.服务超时重试.服务部署.数 ...

  3. [Java/LeetCode]算法练习:二进制间距(868/simple)

    1 题目描述 题目来源: https://leetcode-cn.com/problems/binary-gap/ 给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 ...

  4. Java:一篇学好设计模式

    什么是设计模式 简单理解,设计模式是前人多年写代码踩坑总结出来的优秀代码攻略,目的是减少大量无用代码,让项目更好维护 七大设计原则 接下来要讲的23种设计模式,但遵循下面的七大原则: 单一职责原则 2 ...

  5. CI框架调用第三方类库

    public function index() { //调用第三方类库 /* * 注意事项: * library 里面调用的名字首字母必须是 大写 * 使用它的方法时 使用小写 */ $this-&g ...

  6. Windows 本地安装mysql8.0

    前言 看了网上许多关于Windows 本地安装mysql的很多教程,基本上大同小异.但是安装软件有时就可能因为一个细节安装失败.我也是综合了很多个教程才安装好的,所以本教程可能也不是普遍适合的.现我将 ...

  7. 在.NET 6.0中自定义接口路由

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在本文中,我们将讨论ASP.NET Core中的新路由.我们将了解什么是接口(en ...

  8. Linux进程管理(命令)入门

    进程是一个运行中的程序 进程查看 ps 能够查看当前终端下运行的进程 $ ps PID TTY TIME CMD 26305 pts/0 00:00:00 bash 26312 pts/0 00:00 ...

  9. Python ArcPy批量计算多时相遥感影像的各项元平均值

      本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取.   在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取-- ...

  10. ES6教程笔记

    ES介绍 什么是ES ES全称 EcmaScript 是一种脚本语言的规范 Javascript为ES的实现 Ecma 是一个组织 Ecma组织 为什么要学习ES6? ES6的版本变动内容最多,具有里 ...