借助友盟+U-APM实现安卓应用优化:使用反射测试安卓设备是否使用“动态壁纸”

本文涉及的产品
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
简介: ⾸先,这可能是⼀个⾮常罕⻅的优化,但我们仍然花费了⼤量的时间和精⼒弄清楚这个优化的细节,所以我认为分享这个⼩优化是有意义的。期待有⼀天, 某个地⽅的某个⼈可能会碰到相同的问题,并从这篇⽂章中受益。

⾸先,这可能是⼀个⾮常罕⻅的优化,但我们仍然花费了⼤量的时间和精⼒弄清楚这个优化的细节,所以我认为分享这个⼩优化是有意义的。期待有⼀天,某个地⽅的某个⼈可能会碰到相同的问题,并从这篇⽂章中受益。

什么是反射?

反射⽤于观察并修改程序在运⾏时的⾏为。⼀个反射导向的程序组件可以监测⼀个范围内的代码 执⾏情况,可以根据获取的⽬标对象信息及与此相关的范围修改⾃身。这可通过在运⾏时动态分 配程序代码实现。


在类型检测严格的⾯向对象的编程语⾔如Java中,⼀般需要在编译期间对程序中需要调⽤的对象的具体类型、接⼝interface资料成员elds和⽅法的合法性进⾏检查。反射技术则允许将对需要调⽤的对象的消息检查⼯作从编译期间推迟到运⾏期间再现场执⾏。

 

这样⼀来,可以在编译期间先不明确⽬标对象的接⼝interface名称、字段elds即对象的资料成员(成员变量)可⽤⽅法,然后在运⾏根据⽬标对象⾃身的消息决定如何处理。还允许根据判断结果进⾏实例化新对象和相关⽅法的调⽤。

为什么会出现这个问题?

我们⼀直收到投诉,⽤户声称启⽤动态壁纸后,我们的Buzz⼩部件在红米Note5上滞后。了复现此问题,我们使⽤友盟+U-APM在红⽶Note5上进⾏线上测试,同时使⽤⾃定义异常抛出问题。

1.jpg

测试表明,这个异常是通过WallpaperManager.getInstance(this).getWallpaperInfo()if代码触发的,也就是说,这是由于应⽤程序模糊了桌⾯,并试图在桌⾯上呈现内容导致的问题。如果桌⾯上运⾏着动态壁纸,那么模糊它会造成⼀些周期性的处理器消耗。

为什么要使用反射,而不是API?

我更希望我们的每个应⽤程序在AndroidMarket中只有⼀个版本,⽽⽤于此的API仅在⼀部SDK中可⽤。反射使我们能够使⽤API同时仍然让应⽤程序在具有较旧固件的设备上运⾏。

如何解决?

好了,我们要开始展示解决⽅案了

if(WallpaperManager.getInstance(this).getWallpaperInfo()!=null){//不模糊}

要使⽤反射来做到这⼀点,我们必须使⽤Class.forName("")Class.getDeclaredMethod()Object.invoke()⽅法,有点像这样:

 

boolean blurBackground = true;

//get the WallpaperManager Class

Class classWallpaperManager = Class.forName("android.app.WallpaperManager");

if(classWallpaperManager != null)

{

//find its .getInstance(this) method

Method methodGetInstance = classWallpaperManager.getDeclaredMethod("getInsta

//invoke the WallpaperManager's .getInstance(this) method to get one

Object objWallpaperManager = methodGetInstance.invoke(classWallpaperManager,

 

//discover the WallpaperManager Object's .getWallpaperInfo() Method

Method methodGetWallpaperInfo = objWallpaperManager.getClass().getMethod("ge

//invoke it

Object objWallPaperInfo = methodGetWallpaperInfo.invoke(objWallpaperManager,

if(objWallPaperInfo!=null)

{

Log.d("WidgetDroid","WallpaperInfo not null");

blurBackground=false;

}

}

同样为了确保安全调⽤,我们将它包装在⼀个快速的 Android版本检查和⼀个 try/catch块中以确保安全:

⼤功告成,现在如果设备使⽤的是动态壁纸,应⽤程序背景就不会模糊了,我们的WidgetWorld可以恢复正常。


相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
7天前
|
人工智能 数据可视化 API
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
33 2
|
24天前
|
运维 Ubuntu 测试技术
自动化运维的利剑:Ansible在配置管理中的应用软件测试的艺术:探索性测试的深度与广度
【8月更文挑战第27天】 在数字化浪潮中,高效的运维工作是支撑企业IT系统稳定运行的关键。Ansible,作为一款简易而强大的自动化运维工具,正逐渐成为IT专业人士的新宠。本文将通过浅显易懂的语言和生动的案例,带你了解Ansible的核心概念、安装步骤、基础命令以及它在配置管理中的实际应用。我们的目标是让初学者能够轻松上手Ansible,同时为有经验的运维工程师提供一些实用的技巧和思路。
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在文本生成中的应用与挑战自动化测试框架的搭建与实践
【8月更文挑战第27天】本文将深入探讨人工智能(AI)在文本生成领域的应用,包括其技术原理、实际应用案例以及面临的主要挑战。通过分析AI文本生成的工作原理和实际效果,我们将揭示这项技术如何改变内容创作、新闻撰写、对话系统等多个领域。同时,我们也将讨论AI文本生成带来的伦理和质量问题,以及如何平衡创新与风险,确保技术的健康发展。
|
3天前
|
敏捷开发 IDE 测试技术
自动化测试框架的选择与应用
【9月更文挑战第16天】在软件开发周期中,测试环节扮演着至关重要的角色。随着敏捷开发和持续集成的流行,自动化测试成为提升软件质量和效率的关键手段。本文将探讨如何根据项目需求选择合适的自动化测试框架,并通过实际案例分析展示其在软件开发过程中的应用。我们将从单元测试、集成测试到端到端测试等多个层面,讨论自动化测试的最佳实践和常见问题解决策略。
|
3天前
|
数据采集 人工智能 自然语言处理
探索软件测试中的人工智能应用
在当今快速发展的技术世界中,软件测试作为确保软件质量的关键环节,正经历着前所未有的变革。随着人工智能技术的不断成熟和应用,其在软件测试领域的潜力逐渐显现,为提升测试效率、准确性和自动化水平提供了新的可能性。本文将深入探讨人工智能在软件测试中的应用现状、面临的挑战以及未来的发展趋势,旨在为读者提供一个关于AI如何改变软件测试行业的全面视角。
|
8天前
|
关系型数据库 MySQL 测试技术
《性能测试》读书笔记_数据库优化
《性能测试》读书笔记_数据库优化
20 7
|
21天前
|
监控 数据管理 jenkins
深入理解与应用软件自动化测试框架
【8月更文挑战第30天】在现代软件开发周期中,自动化测试已成为提高测试效率、保证软件质量的关键步骤。本文将探讨自动化测试框架的设计与实现,重点放在如何根据不同项目需求选择合适的测试框架,以及如何有效地集成到现有的开发和测试流程中。通过分析几个流行的自动化测试工具,如Selenium、Appium和JUnit,我们将讨论它们的特点、优势以及可能面临的挑战。此外,文章还将介绍一些最佳实践,帮助读者构建稳定且易于维护的自动化测试环境。
|
24天前
|
存储 人工智能 自然语言处理
知识库优化增强,支持多种数据类型、多种检索策略、召回测试 | Botnow上新
Botnow近期对其知识库功能进行了全面升级,显著提升了数据处理能力、检索效率及准确性。新版本支持多样化的数据格式,包括PDF、Word、TXT、Excel和CSV等文件,无需额外转换即可直接导入,极大地丰富了知识来源。此外,还新增了细致的文本分片管理和编辑功能,以及表格数据的结构化处理,使知识管理更为精细化。 同时,平台提供了多种检索策略,包括混合检索、语义检索和全文检索等,可根据具体需求灵活选择,有效解决了大模型幻觉问题,增强了专业领域的知识覆盖,从而显著提高了回复的准确性。这些改进广泛适用于客服咨询、知识问答等多种应用场景,极大提升了用户体验和交互质量。
44 4
|
22天前
|
测试技术 Linux Android开发
i2c总线及设备测试工具i2ctools:i2cdetect、i2cdump、i2cget、i2cset
本文介绍了i2ctools工具集的使用,包括i2cdetect、i2cdump、i2cget和i2cset,这些工具有助于I2C设备的开发和调试,通过检测设备、读写寄存器和数据块来提高开发效率。
58 1
|
23天前
|
测试技术 芯片
飞针测试机在贴装线路板应用
【8月更文挑战第26天】飞针测试机在PCBA中的应用涵盖检测开路与短路、测试元件电气性能、检查元件安装正确性、识别缺失或损坏的元件,并适用于小批量和多品种生产,有助于提高产品质量和可靠性。它能提供详细故障信息,便于问题定位与反馈,但测试速度较慢,需根据生产规模和质量要求选择合适的测试设备。