简介

之前接手的老项目,从接手到现在也没怎么去维护过,突然测试那边给我提了一个ANR的BUG,由于从别人手中接手,并且此项目也不是经常需要维护,所有对项目代码并不是特别熟悉,因此解决此问题还是比较麻烦的,今天就把解决ANR的过程记录一下。

分析ANR问题

通过的logcat日志文件可以查看到ANR是发生在哪个进程

通过ANR文件可以发现"main" 主线程是被锁阻塞了



这是一个典型的主线程被锁阻塞的例子;

- waiting to lock <0x05ea7314> (a java.lang.Object) held by thread 4

其中等待的锁是<0x05ea7314>,这个锁的持有者是线程 4。进一步搜索 “tid=4” 找到线程4, 发现它是Native里的nativeStopWfdSession方法导致的,

通过源码可以发现此方法最终调用了ALooper::awaitResponse,导致主线程一直被阻塞了。

从上面报错信息,可以看到是MultiscreenSource类的stop方法里postAndAwaitResponse卡死了。



我们通过添加一些日志可以发现其实kWhatStop的消息方法已经执行了



一路跟过去发现是卡在disconnectClientAsync方法的mClientInfo.mStreamClient→deinit();,而这句话最终调用的时候VStreamClient类的deinit()方法



最终发现是因为AutoMutex _l(vClientMutex);的锁导致了死锁



解决问题

上面我们分析到在代码中具体是哪里导致的ANR,通过全文分析导致ANR的锁机制使用的不正确,也就是说那里没必要上锁。最终把加锁的地方去掉就可以了。

分析项目中ANR问题的更多相关文章

  1. 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】

    初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...

  2. php 从2维数组组合为四维数组分析(项目中前台侧边栏导航三级分类显示)

    foreach函数(循环函数)内嵌套循环函数时,当内层完全循环完后,才会向上一级循环 数组要注意问题 array_merge----合并一个或多个数组 将一个或多个数组的单元合并起来,一个数组中的值附 ...

  3. 如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片

    在我们迭代项目的过程中,经常会启用某些功能,或者修改某些界面的问题,那么问题来了,这样很容易出现大量的冗余.java文件,冗余资源文件,一些冗余的界面文件等.那么问题既然出现了,那么如何去解决呢,这就 ...

  4. 对某项目中Vuex用法的分析

    上周五刚发布一个线上版本,趁着新的需求和bug还没到来,决定分析一下正在维护的一个使用Vue 2.0 开发的后台管理系统中Vuex部分代码.这部分代码不是我写的,加上我一直在“使用”现成的而不是“搭建 ...

  5. 项目中Map端内存占用的分析

      最近在项目中开展重构活动,对Map端内存尽量要省一些,当前的系统中Map端内存最高占用大概3G左右(设置成2G时会导致Java Heap OOM).虽然个人觉得占用不算多,但是显然这样的结果想要试 ...

  6. 关联分析FPGrowth算法在JavaWeb项目中的应用

    关联分析(关联挖掘)是指在交易数据.关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式.关联.相关性或因果结构.关联分析的一个典型例子是购物篮分析.通过发现顾客放入购物篮中不同商品之 ...

  7. Maven项目中pom文件分析

    pom英文全称: project object model 1.概述 pom.xml文件描述了maven项目的基本信息,比如groupId,artifactId,version等.也可以对maven项 ...

  8. 【新手总结】在.Net项目中使用Redis作为缓存服务

    最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写,很零碎也没沉淀下来什么,这次算是一个系统学习和实践过程的总结. 和Redis有关的基础知识 ...

  9. 转:C++项目中的extern "C" {}

    引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __c ...

  10. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...

随机推荐

  1. 关于laravel路由无法访问(nginx)

    laravel路由无法访问 被这个问题折腾了 好几次了,记录一下希望可以帮到后面的朋友 在laravel路由中配置好了之后无法访问的问题有可能是因为在本地服务配置的问题(我使用的是nginx服务器) ...

  2. P3730 曼哈顿交易 题解

    题目链接:曼哈顿交易 比较容易想的题,观察下首先不带修改,考虑维护的东西:次数作为权值,这玩意很显然很难在线维护,考虑下离线算法.看到这种和次数有关的权值,典型的单点加入和删除是非常好找到变化的,那么 ...

  3. 【MFC学习二】CFileDialog导出文件

    用CFileDialog导出文件,用户可指定文件名后缀等,感觉操作上比上文的 BROWSEINFO 更加人性化. //将数据项写入CSV文件 int PutCSVItemLine(FILE *file ...

  4. CF1823D Unique Palindromes

    题目链接 题解 知识点:构造. 首先反证法容易证明一个结论:每次增加一个字符,本质不同的回文子串至多增加一个. 那么无解的条件就是,\(c_i - c_{i-1} > x_i -x_{i-1}\ ...

  5. 【Unity3D】人物跟随鼠标位置

    1 游戏对象 ​ 2D动画和人体模型及动画中介绍了 Aniamtion.Animator.人体模型.人体骨骼.人体动画等基础知识,本文将通过 "人物跟随鼠标位置" 案例加强对 Un ...

  6. 细说 QUEST CENTRAL FOR DB2 八宗罪

    作为一个从事oracle plsql开发2年的程序员,如今跳槽从事DB2数据仓库项目. 以PL/SQL Developer为参考,以下简称PLSQL,细说QUEST CENTRAL FOR DB2 5 ...

  7. [Rust] 命名习惯

    [Rust] 命名习惯 通用习惯 CamelCase: 首位是大写字母的单词,没有分隔符: snake_case: 使用下划线作为分隔符,小写单词: SCREAMING_SNAKE_CASE: 使用下 ...

  8. 骚操作之 持有 ReadOnlySpan 数据

    ReadOnlySpan<T> 可以说现在高性能操作的重要基石 其原理有兴趣的同学可以看 2018 的介绍Span<T>文章 其为了保障大家安全使用做了相应的限制 那么有没方法 ...

  9. 【Azure 应用服务】如何禁止chinacloudsites.cn 访问?

    问题描述 Azure App Service创建后,默认会有一个  Azure App Service创建后,默认会有一个 https://xxxxxxxxxxxxx.chinacloudsites. ...

  10. Jmeter 之 forEach控制器

    1 添加方法: 线程组右键-> 添加 -> 逻辑控制器 ->ForEach控制器   2 作用: 可以更方便JMeter后置处理器提取出来的多组数据,也可以定义具有特定规则的数据,用 ...