加入收藏 | 设为首页 | 会员中心 | 我要投稿 广安站长网 (https://www.0826zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

我用反射 + 动态代理揪出元凶

发布时间:2021-03-12 15:35:40 所属栏目:外闻 来源:互联网
导读:现在是很多 APP 最基本也不可或缺的能力之一,尤其是对打车、外卖之类的应用来说。但对定位的调用可不能没有节制,稍有不慎可能导致设备耗电过快,最终导致用户卸载应用。 笔者所在项目是一个在后台运行的 APP,且需要时不时在后台获取一下当前位置,再加上

现在是很多 APP 最基本也不可或缺的能力之一,尤其是对打车、外卖之类的应用来说。但对定位的调用可不能没有节制,稍有不慎可能导致设备耗电过快,最终导致用户卸载应用。

笔者所在项目是一个在后台运行的 APP,且需要时不时在后台获取一下当前位置,再加上项目里会引入很多合作第三方的库,这些库内部同样也会有调用定位的行为,因此经常会收到测试的反馈说我们的应用由于定位过于频繁导致耗电过快。

排查这个问题的时候,笔者首先排除了我们业务逻辑的问题,因为项目中的各个功能模块在定位时调用的是统一封装后的定位模块接口,该模块中由对相应的接口做了一些调用频率的统计和监控并打印了相关的 log 语句,而问题 log 中跟定位相关的 log 语句打印频率跟次数都是在非常合理的范围内。

这时我才意识到频繁定位的罪魁祸首并不在我们内部,而是第三方库搞的鬼。那么问题来了,引入的第三方库那么多,我怎么知道谁的定位调用频率不合理呢?虽然我在项目中的公共定位模块中打了 log,但问题是第三方库可调不到我们内部的接口。那么我们能不能到更底层的地方去埋点统计呢?

2. AOP

AOP,即面向切面编程,已经不是什么新鲜玩意了。就我个人的理解,AOP 就是把我们的代码抽象为层次结构,然后通过非侵入式的方法在某两个层之间插入一些通用的逻辑,常常被用于统计埋点、日志输出、权限拦截等等,详情可搜索相关的文章,这里不具体展开讲 AOP 了。

要从应用的层级来统计某个方法的调用,很显然 AOP 非常适合。而 AOP 在 Android 的典型应用就是 AspectJ 了,所以我决定用 AspectJ 试试,不过哪里才是最合适的插入点呢?我决定去 SDK 源码里寻找答案。

(编辑:广安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读