首页 > 编程知识 正文

射频调优,netty核心组件

时间:2023-05-06 07:24:26 阅读:161570 作者:489

质量性能监视(QPM )是一个质量性能监视组件,可以方便地查看当前App的性能和常规数据。 目前主要运行在Android平台上,通过集成QPM组件,可以通过App从浮动窗口可视化相关实时数据。 旨在帮助许多开发人员和测试同学快速了解App中存在的性能问题,展示了许多常用数据,减少了复杂的操作。

经过几个月的方案调研,不断优化,经过内部版本的迭代和测试,目前已经稳定下来。 在北京2018年的GDG活动上共享了这个性能优化组件,在内部进行了深层次的共享和探讨,添加整理了大家需要的功能,只为更方便的服务于广大的安卓开发者。 现在是QPM官宣开源。

https://github.com/ZhuoKeTeam/QPM

欢迎明星先生。 不管有什么奇怪的想法和想法,我都很期待。 的Issue和宣传不能充分、完全满足,但我们会竭尽全力。

QPM目前拥有的功能:获取手机常用的基本信息(是否为root、版本号、wifi、硬件信息等)。 可以实时获取当前App的CPU和内存信息,判断手机是否消耗了更多的资源。 如果UI接口卡不是卡,看FPS (绿色正常,红色是纸箱)。 您可以轻松获取当前正在运行的Activity的名称,并快速找到代码中的当前接口。 APP当前打开的线程数可用于确定是否占用了过多的资源。 查看APP运行后3G、4G上的流量消耗情况。 监控H5页可以判断为白屏时间资源请求时间。 如果不方便抓住包,使用组件显示 API 接口可以记录请求地址、服务器相关状态代码、Cookie和回复数据。 直接获取当前App的AndroidManifest.xml信息,可以显示四个常用的主要组件和注册权限,并直接跳转到相应的Activity页面。 不使用Root,可以获取App中的所有SharedPreferences存储信息。可修改方便快速定位问题的开发和测试。 解决屏幕录像、根据场景无法再现的问题的过程。 吉利和我们一样,整天疲于业务开发,每天除了加班,还加班。 但是,臭虫不断,看着别人的APP,为什么我会这么受挫? what’s fuck! 慢慢地,掌握了一些性能优化的技巧之后,熟练地进行优化,APP就不那么上钩了,看着擅长的作品,心里充满了喜悦。

吉利——GT当时,看到腾讯GT的浮动窗,眼前一亮。 这个很好用很好。 但是经过一段时间后,我发现每个手机要想看数据就必须先安装GT。 另外,有些功能需要路线后才能看到。 我觉得如果我们的APP中的一些经常变化的数据能在GT的浮动窗口展示就太方便了,所以试着把GT放进了我们的APP。 这个过程超级麻烦,终于添加了。 结果,我们的APP直接增大了3MB。 我们的APP变成了70MB。 增加3MB也没关系,但怎么能忍受呢? 一个组件增加3MB。 于是我想根据我们APP的特性,自己制作QPM。 功能很简单,将一些GT中的数据展示在QPM上,以GT为参考,开始实施。

既然车轮已经有了,为什么还要再做一个车轮呢? 否则,就算有轮子,这个轮子也和我的车型号不相符啊。 不能最大限度地发挥。 因此参考车轮的大致框架,改造成我们自己的车轮。 贴蕾丝、换螺丝、做小号。 哈哈,最后终于有了简易版,但是太粗糙了,我们自己都不想用。

吉利的——FPS突然接手了一个老项目,什么都不熟悉。 UI界面虽然很脆,但不容易优化。 万一优化了之后,背上怎么办? 先这样吧。 必须优化直到有一天老板说卡不行。 那我们慢慢优化吧。 但是,心里很难有谱。 我该怎么优化? 明明没有任何指标,还很难得到。 如果有能告诉我哪个接口卡的工具呢? 打多大牌,优化才能达到什么效果,真好啊。 有些手机有系统自带的FPS指标,而其他手机则没有。 不能用这个手机作为评价标准吧。

吉利——栈顶的Activity名字让我想起以前看同事的手机,每次打开APP,都会显示出当前APP的套餐名和当前Activity的名字,感觉很好,但也没什么用吧。 他说:‘我刚来,老板分配了一些任务,但我对代码不熟悉。 具体的页面怎么查,不方便。 有了这个就很容易了。 ”很有道理啊。 可以追加一个。 有一天我在修改bug的时候,真的找不到页面,想问问业务同学。 这是哪一页? 他直接在命令行上获取了堆栈顶部的Activity的名称,但是以前同事说的插件APP需要翻墙下载。 从那以后,我坚定地决定必须把这个功能添加到我的QPM中。 我想给和我遇到过同样问题的人省去这些麻烦。 每一次小小的进步,以后回头看,那都是一大步。

吉利的——画面录像功能几乎没有了,有一天,一个测试同学向群里扔了一个小视频。 在一段发生了bug的视频中,用另一部手机录制了画面。 我希望我能把这个加到QPM里。 这几天,我的手机出了问题。 我用小米自带的录像屏幕工具,简单地录了下来,发给了chdbd。 但是伟大的人问我,怎么录? 我说我要用系统自带的工具,他说录不了,然后让我下载软件录。 这个过程听起来很好

麻烦的,更加坚定了我的决心。经过查询原来 Android 5.0 以上系统就提供了方法哈,那我就直接放到我们的 QPM 中,之后遇到这类需要截屏,但是手头没工具的情况,就可以直接开启 QPM 录屏了,又是一个棒棒哒的功能。

准备优化前的思考 重复的工作能否减少?

必须可以!

每天重复着同样的工作,周而复始,枯燥乏味,因此衍生出了自动化操作,比如脚本,工具等,让人们可以把时间节省下来,做更多的事情。

Android 如何进行性能优化? 抓包: Charles,Fiddler, Wireshark;Android Studio: DDMS, Logcat;Android Studio 中 Profiler 的 内存,流量,CPU;Android 手机中开发者选项里面有很多辅助性工具。

这些工具都有一个前提,很多都需要手机连接数据线,再打开工具才能使用,如果客户手机有问题,也如此的话,比较费心费力。对于未 root 的手机要拿到一些信息,着实不易。

测试同学可以进行性能优化监控吗?

可以,但是业务测试和需求每天都很多, 测试同学没空,没精力去测试这方面的性能。除非有专业的性能测试团队,每天负责检测。手机发热,界面卡顿都需要监控起来。

运行 App 即可查看性能

大家加班,加点,忙需求,没有那么多的时间去看性能问题,最多在几个关键时间点集中处理下。如果我们的 App 运行后,就内置了一个这样的功能,只要打开开关,就可以悬浮窗到主界面上,根据 FPS,内存,CPU,去看一个检测页面卡顿情况就再好不过了。

悬浮窗助力性能优化

让我们来尝试做一些可以可视化的悬浮窗功能吧,里面可以展示一些基础的性能指标数据。

启动 App 后便可以看到一些数据,解决未 root 手机无法获取数据的疑难杂症。

包名

一个 apk 会有一个固定的包名,但是在某些特殊场景下,却会展示多个包名,例如:测试包,正式包,变种包,推送测试包等等,给 QPM 展示当前应用的包名,在某些时候可以方便我们定位问题。举个例子:我们之前一直在测试推送包,有时候需要切换到正式包,在两个包中切换各种RD,ST环境,最后我都不记得我用的什么包,只能卸载了,重新安装。QPM 的悬浮窗可以直接展示当前应用的包名,看一眼就知道了,其实也可以把当前进程+线程号打印出来,方便开发同学分析问题。

当前 Activity 的名字

试想,做了5年的项目,交给新来你接手?或者同事离职,丢下一堆坑,需要你来填坑。根据代码梳理流程后,也不一定能立刻接手,如果根据页面找Activity,一个字————累!

如果能直接展示当前界面的 Activity 名字,是不是更容易一些呢?

CPU 和 内存

界面怎么这么卡啊,快优化下。懵逼的你可能会想这要从哪里入手?先从界面渲染,还是从业务角度? 关键是我们需要知道在页面的什么场景下会出现问题,有一个直观指标就容易判断了。当 CPU 到达 200% 的时候,内存剧增,那肯定有问题,可以用性能工具对该页面详细的分析。 一般先看看在该界面的 CPU 和 内存是否异常,再结合业务逻辑把相关的数据提前或者延迟获取,减少同一时刻并发获取,从而减少主界面卡顿。

线程数

这是什么鬼?还记得曾经的老大说要复用线程,别单独搞么。如果你发现 200 多个线程,那你就得考虑下是否需要线程池了。这里可以依据现有逻辑来处理,并非绝对性的。

Activity 堆栈

还记得刚学 Activity 那会儿么,Activity的 四种 LaunchMode,这里可以记录一个栈里面的 Activity 的顺序。方便你直观了解栈中的情况。

流量

我们 App 的请求用了多少流量? 可能在 3G/4G 关注点比较多,虽然现在绝多数都是 WIFI,但是我们的用户在一定环境下会使用 3G/4G, 所以还是又必须关注下。

网络情况如何? 比方说我用的是 Wifi, 在某些角落网速很差,甚至没流量数据,我们都希望可以了解。

在某个时刻,页面是空白的?为什么没有数据呢,可以看看尝试看看下载速度。

尤其对现在约来越多的某些小视频,大家可能会关心大约用了多少流量。

屏幕录制

基于 Android 5.0 的 API,录制整个屏幕,方便大家复现某些关于操作记录的问题。

监控 H5 页面

需要配合相应的设置,我们就可以在 WebView 中对任何一个网页进行异步检测,例如获取当前页面地址,首页白屏加载时间,以及每个资源的请求时间,和请求资源地址。非常容易。

自定义的五种对外样式

以下的一个唯一标识,表示一个 item, 如果要添加多个,可以把唯一标示设置为不同的。

大文件框样式

QPMManager.getInstance().showBigText(flag, bigText);
第一个参数 flag 是唯一标示, 第二个 bigText 是自定义悬浮窗中显示的所有文本数据。

键值对文本样式

QPMManager.getInstance().showKeyValue(flag, key, value);
第一个参数 flag 是唯一标示, 第二个 key 是自定义悬浮窗中显示的 key 值,第三个是 悬浮窗中的 value 值。

键图样式

QPMManager.getInstance().showKeyPic(flag, key, picRes);
第一个参数 flag 是唯一标示, 第二个 key 是自定义悬浮窗中显示的 key 值,第三个是 悬浮窗中的 pic Res 中的资源值。

图值样式

QPMManager.getInstance().showPicValue(flag, picId, value);
第一个参数 flag 是唯一标示, 第二个 key 是自定义悬浮窗中显示的 key 值,第三个是 悬浮窗中的 pic Res 中的资源值 (可以放到你们的主 App 中)。

自定义样式

QPMManager.getInstance().showCustom(flag,QPMTemplateCustomRenderer);
第一个参数 flag 是唯一标示, 第二个 QPMTemplateCustomRenderer 是自定义悬浮窗中你们要自己添加的布局,可以写一个类,继承自QPMTemplateCustomRenderer,实现里面的方法,悬浮窗上就可以显示对应的内容。

悬浮窗 设置信息

更多实用信息:

手机的基本信息AndroidManifest.xml 信息App 中所有的 SharePreference 信息可配置的开关网络接口 手机基础信息 再也不用 去手机的复杂界面查看各种数据;再也不用 下载 辅助性 apk 获取信息;再也不用 因为某些信息没有,查询半天。

是否 Root, SDK 版本,手机型号,网络,名称,IP,Mac 地址,屏幕分辨率,CPU 架构等等信息。遇到关键的数据,还能复制。

这里获取的数据更全面

AndroidManifest.xml 信息

包名,版本号,App 的所有权限,构建 SDK 的版本信息,还有最最重要的注册的四大组件(Activity,Service,Receiver,Provider)。里面的 Activity 可以直接点击后跳转,Service可以查看有多少本地服务,Receiver 可以很明确的知道当前注册了多少广播,Provider 可以查看本地的内容提供者。

应用的所有 SP 信息

Root 手机我们直接通过 文件管理器 可以直接查看 SP 文件。

如果没有 Root 呢? 笨办法,通过调试代码或者 log 打印输出。

包含整个 App 的所有 SP 信息,可以查看单个 SP 里面的信息,最最好的是还能直接修改 对应的 Value。

极大提升程序员们的开发效率。

其他开关

我们提供的了这些基础功能,打开开关后,可以直接在悬浮窗展示相关数据信息。

自我控制聚焦点,只关注需要的信息。

所有的开关,可以打开,关闭,对于某些影响性能的操作,可以关闭其他所有的东西,保留关注的指标。

每一个开关都可以长按开关名称的这一条,上下移动位置,调整开关的顺序。

网络接口

获取最近50条网络请求数据,可以查看更多信息:

请求方式;返回状态码;请求时长;请求大小;返回数据大小

需要 OkHttp,然后可以获取网络请求的所有数据,包括请求 Request Header,Request Response,Response等数据。

精简模式

关注的数据太多会占满屏幕,可以开启精简模式,默认显示开关列表最顶部的两个选项。开关列表可以通过拖动把选项位置移动到想要的前两项。

QPM 注意事项

QPM 的悬浮窗如果开启过多的功能,可能会影响性能,推荐:需要什么功能,就开启什么开关,这样把影响降低到最低。

QPM 与其他同类 PM 的区别

与其他同类 QPM 工具相比,有以下优势:

任何一个内置的 QPM 的 App, 可以直接可视化相关性能和数据;内置多个参数指标开关,想用哪个就开哪个;精简模式,只显示关注的数据指标;自定义了五种模板,可以通过简单的API,直接将 app 的变化数据动态展示;屏幕录制;H5页面性能监控;四大组件的展示,并可以直接跳转到对应的 Activity 中;SharedPreferences 文件直接浏览和修改相应的 key 值;通过 OkHttp 展示相关的网络请求信息;当前 App 的流量使用情况。 开源地址

QPM:  https://github.com/ZhuoKeTeam/QPM

请给 QPM  一个 Star 吧!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。