首页 > 其他分享 >分析项目中ANR问题

分析项目中ANR问题

时间:2022-11-19 14:47:16浏览次数:51  
标签:分析 发现 导致 接手 项目 阻塞 ANR 方法

简介

之前接手的老项目,从接手到现在也没怎么去维护过,突然测试那边给我提了一个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,方法
From: https://www.cnblogs.com/zuojie/p/16901751.html

相关文章

  • 全面解析Android之ANR日志
    不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(简称ANR)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。本文将带你......
  • 常见用户特征分析的方法
    常见的用户特征分析方法有用户画像分析、聚类分析、监督模型、RFM用户分群。1、用户画像分析用户画像分析就是基于大量的数据,建立用户的属性标签体系,同时利用这种属性标签体......
  • 81:递归函数_函数调用内存分析_栈帧的创建
    ###递归函数递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。递归类似于大家中学数学学习过的“数学归纳法”。每个递归函数必须包含两个部分:1.......
  • 75:浅拷贝和深拷贝_内存分析
    ###浅拷贝和深拷贝为了更深入的了解参数传递的底层原理,我们需要讲解一下“浅拷贝和深拷贝”。我们可以使用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。浅拷贝:不拷贝子对象......
  • 76:参数的传递_不可变对象含可变子对象_内存分析
    ###传递不可变对象包含的子对象是可变的情况#传递不可变对象时。不可变对象里面包含的子对象是可变的。则方法内修改了这个可变对象,源对象也发生了变化。a=(10,20,......
  • 71:变量的作用域_全局变量_局部变量_栈帧内存分析讲解
    ###变量的作用域(全局变量和局部变量)变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。全局变量:1.在函数和类定义之......
  • CMake gui 生成vs2019项目
    先准备两个文件夹src文件夹存放CMakeLists.txt和编写的源文件build文件夹用于存放cmake生成的一些文件(暂时为空)打开CMake界面,选择刚刚准备好的两个文件夹点......
  • 70:函数也是对象_内存分析
    ###函数也是对象,内存底层分析Python中,“一切都是对象”。实际上,执行def定义函数后,系统就创建了相应的函数对象。我们执行如下程序,然后进行解释:defprint_star():......
  • 67:函数的基本概念_内存分析_函数的分类_定义和调用
    ###函数简介###函数的基本概念1.一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。2.函数是代码复用的通用机制。###Python函数的分类Python中函数分为......
  • Git基础.ONE(简单创建一个本地Git项目吧)
    一.Git简介1.Git是什么?Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态(游戏存档)的命令行工具Git是一个命令行(小黑窗)工具,用于版本控制(存档器)2.Git......