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

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

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

什么是反射?

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


在类型检测严格的⾯向对象的编程语⾔如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可以恢复正常。


相关实践学习
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
本场景将自定义告警信息同时分发至多个通知渠道的需求,例如短信、电子邮件及钉钉群组等。通过采用轻量消息队列(原 MNS)的主题模型的HTTP订阅方式,并结合应用实时监控服务提供的自定义集成能力,使得您能够以简便的配置方式实现上述多渠道同步通知的功能。
相关文章
|
9月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
387 6
|
7月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
990 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
556 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
8月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
1017 11
|
12月前
|
安全 测试技术 Linux
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
384 2
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
|
9月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
9月前
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
1298 0
|
12月前
|
测试技术 数据库 Python
解释测试中setup和teardown函数的应用。
总结起来,`setup`和 `teardown`函数就像扔宴会的主人,他们保障了宴会的流畅进行。他们是准备环境和清理现场的重要工作人员,他们的工作直接影响着我们的测试效率和质量。我们可以把 `setup`和 `teardown`想象成隐藏在幕后,默默为我们服务的工作者,他们做着我们需要但是往往忽视的工作。所以,下次当你写测试的时候,别忘了给你的 `setup`和 `teardown`留出足够的位置,因为他们的作用可能是你成功的保证。
286 14
|
12月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
456 1
|
12月前
|
存储 5G 测试技术
时钟同步测试校验仪的应用介绍
时间同步测试仪是一种高精度、高可靠性的设备,用于测量和评估时间同步系统的性能。它广泛应用于电力系统(如电网调度、继电保护)、通信网络(如5G基站、光传输网络)、铁路交通(如列车运行控制、信号系统)、工业自动化(如生产线、控制系统)以及科学研究(如天文观测、粒子物理实验)等领域。其功能包括高精度时间测量、多信号接口支持、自动测量与分析、数据存储导出及性能评估输出,确保各领域设备间的时间同步精度与稳定性,保障系统高效运行。

热门文章

最新文章