【问题描述】

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

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. 探究平台化设计的核心思想和Lattice的设计原则

    一. 平台对业务敏捷支撑的挑战 早期阿里的交易中台遇到了一些挑战,这个在毗卢的博客中有提到,主要遇到了这些问题:新小业务都有一个成长规律,在早期业务模式验证阶段,需要的玩法比较简单,希望能频繁的发布快 ...

  2. JVM的垃圾收集算法

    介绍分代收集理论和几种垃圾收集算法的思想及其发展过程. 分代收集理论 当前商业虚拟机的垃圾收集器,大多数都遵循了 "分代收集"(Generational Collection)的理 ...

  3. [Linux]常用命令之【cat/echo/iconv/vi/grep/find/head/tail】

    cat cat [选项] [文件].. # 一次显示整个文件或从键盘创建一个文件或将几个文件合并成一个文件 cat -n file1 # 编号文件内容再输出 echo -n 输出后不换行 -e 遇到转 ...

  4. Django笔记十九之manager用法介绍

    本文首发于微信公众号:Hunter后端 原文链接:Django笔记十九之manager用法介绍 首先介绍一下 manager 的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用 man ...

  5. odoo 开发入门教程系列-添加修饰

    添加修饰 我们的房地产模块现在从商业角度来看是有意义的.我们创建了特定的视图,添加了几个操作按钮和约束.然而,我们的用户界面仍然有点粗糙.我们希望为列表视图添加一些颜色,并使一些字段和按钮有条件地消失 ...

  6. mysql迁移:mysqldump导出表结构及数据

    问题描述:有需要mysql某几张表的需求,某个数据库某几张表,导出先检查相应的数据库和表是否存在 数据泵用法:默认导出的是表结构以及表中的数据 mysqldump -uroot -p -S /data ...

  7. 新手如何让一个python写的游戏运行起来

    本文主要解决问题为python中的pygame库安装 安装包版本:python-3.4.3.amd64.msi 下载链接:https://pan.baidu.com/s/1_jIRdVugSNzXKb ...

  8. 如何确定 this 指向?改变 this 指向的方式有哪些?

    this 指向: 1. 全局上下文(函数外) 无论是否为严格模式,均指向全局对象.注意:严格模式下全局对象为undifined 2. 函数上下文(函数内) 默认的,指向函数的调用对象,且是最直接的调用 ...

  9. 简单的了解下 Fetch API 的工作原理

    一.简介 Fetch API是一种现代的Web API,提供了一种异步获取网络资源的方法.由于其简单性.灵活性和一致性,它已经成为Web应用程序中获取数据和资源的流行选择.在本文中,我们将深入探讨Fe ...

  10. 可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

    可视化大屏适配/自适应现状 可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件.工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东 ...