android投屏程序线程无故卡死不执行,如何分析?

2024-04-08 20:52

本文主要是介绍android投屏程序线程无故卡死不执行,如何分析?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

hi,粉丝朋友们:
大家好!近期做了一个车载互联,云手机相关的投屏的小项目demo,具体效果如下:
在这里插入图片描述

是不是感觉有点厉害哈,可以云手机远程控制,但是意外就出现了。。。

比如像如下这样拼命操作一下:
真正勇士应该经得住任意的考验

在这里插入图片描述

很遗憾发现一阵疯狂触摸操作后,居然客户端再也没有办法触控了,处于gg状态,触控后服务端的手机再也没有相关的反应,但是服务端依然是可以自己操作,也可以传递画面的变化给客户端

针对这这个无法操控问题要展开分析应该如何呢?

分析问题

针对这个客户端控制服务端触摸操作无反应问题,有以下几个方面定位排查:

1、怀疑进程直接异常崩溃

这个可以从日志,和操作行为可以看出,客户端和服务端,画面还是可以同步的,说明不存在异常退出这种情况发生,客户端日志也没有发现有任何报错,故排除程序自身异常退出导致问题

2、客户端没有传递相关的触摸数据

这个看着现象是有这个可能,但是经过客户端日志打印,发现也是正常进行了触摸数据的传递

3、服务端不接受触摸数据

这个也只能加日志相关的打印看看,发现日志在客户端无法触摸控制后就完全停止了,再也没有打印出相关的日志。故问题就明显指向是不是这个线程卡死了,连日志都不打印了,,,这个怀疑是正常的。
但是为啥会卡死呢?
怀疑又有以下两个方面:
怀疑1:
是不是接受不到数据,一直处于read服务端数据发过,一直处于阻塞状态?
这个也对read方法的前后加了很多打印,伪代码如下

Log.i("read ------start ");
read()//读取网络数据
Log.i("read ------end ");

发现卡死最后一句日志,并不一定是start这里停留,理论上如果read卡死那每次卡死肯定是有start没有end。所以经过日志也要排除这个可能

怀疑2:
是不是线程有其他方法阻塞?是否可以通过systrace/perfetto查看?
现在没有更多线索只能继续排查,用perfetto抓trace看线程是不是有啥卡住任务,具体trace如下图所示:
在这里插入图片描述
所以systrace其实也没有看出卡住时候是在等待啥,有啥一直运行的任务,所以perfetto好像也没有解决线程为啥卡死在一个地方

绝招方式解决

上面几种常见的分析思路和工具好像都没有很好的办法来分析出根本问题,现在就只知道线程卡死不动了,还不是网络阻塞。。。也不知到线程这个时候到底怎么了。。
想想线程卡住不动肯定处于某个状态,是否可以根据线程这个时候的具体状态信息反推出可能问题呢?
可以通过ps -T方式查看相关进程的线程目前运行情况和状态
具体命令如下:

adb shell ps -T  -p 进程号

注意:这个可能需要是userdebug机器

在程序卡住时候可以看看进程状态:
在这里插入图片描述
可以看到客户端触摸服务端无响应时候,这个时候服务端线程状态居然是pipe_write这样一个执行状态,说明是一直阻塞在这个地方。

那么问题来了,程序中哪里有啥地方会进行这个pipe_write操作呢?
哈哈,说实话这个就比较难想到了,一般要app层面追踪也很难,这里一般能想到程序中会有这个写入一般只有一个控制台的输出了。

             System.out.println(PREFIX + "WARN: " + message);

如上面这个 System.out.println方法,他就是需要进行pipe_write
一般android里面不是不用这个打印日志么?都是Log.i,一般情况是这样,但是投屏时候为了方便直接shell触发执行,方便直接terminal看输出情况,所以使用了这个System.out.println

问题分析到这里,那么考虑把程序中所有的System.out.println屏蔽了试试
在这里插入图片描述
其实也可以用kill -3这种获取堆栈看看到底卡在哪里:
在这里插入图片描述
一样发现是System.out.println这方法

屏蔽后发现一切运行完美。

总结:

在针对线程无故卡死情况,日志方面也不打印输出情况,需要考虑多个手段来尝试定位分析出目前的线程状态,然后根据状态反推出程序中可能的疑点,最后尝试修改验证。

本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

私聊作者+v(androidframework007)

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

这篇关于android投屏程序线程无故卡死不执行,如何分析?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/886426

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud