AOP新技术Android 360性能调优 性能优化

Android 2分钟实现全埋点 Aspect A

2021-03-15  本文已影响0人  鹏城十八少

笔者是面霸,面试200+场       当过考官:面过别人300+场     去过500强,也呆过初创公司。

关注我就能达到大师级水平,这话我终于敢说了, 年薪60万不是梦!

斩获腾讯、华为、oppo,VIVO,安卓岗offer!我有一套速通大厂技巧分享给你!

AOP介绍

Aspect Oriented Programming , 面向切面编程,优点如下。

(1)针对同一类问题的统一处理

(2)无侵入添加代码

  (3) 运行在,,,,,,,但是注解在编译期间

1)在项目gradle中添加依赖

classpath'com.android.tools.build:gradle:3.6.2'

classpath'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'

2) 在app gradle中添加配置

applyplugin:'android-aspectjx'

aspectjx{

    //排除所有package路径中包含`android.support`的class文件及库(jar文件)

    exclude'android.support'

}

3).类注解,方法注解,正则表达式。不要写错正则表达式

@Aspect

public class PerformanceAop {

@Around("call(* com.test.WorkManger.**(..))")

public void getTime(ProceedingJoinPoint joinPoint) {

Signature signature = joinPoint.getSignature();

        String name = signature.toShortString();

        long time = System.currentTimeMillis();

        try {

joinPoint.proceed();

        }catch (Throwable throwable) {

throwable.printStackTrace();

        }

Log.i("PerformanceAop", name +" cost " + (System.currentTimeMillis() - time));

    }

}

public class WorkManger {

public void start(){

try {

Thread.sleep(2000);

        }catch (InterruptedException e) {

e.printStackTrace();

        }

}

}

2021-03-14 16:12:27.604 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2000

2021-03-14 16:12:29.618 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2003

2021-03-14 16:12:31.630 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

2021-03-14 16:12:33.633 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2002

2021-03-14 16:12:35.637 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

2021-03-14 16:12:37.643 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2002

2021-03-14 16:12:39.647 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

2021-03-14 16:12:41.651 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

2021-03-14 16:12:43.665 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2002

2021-03-14 16:12:45.669 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

现在实行:某个类里面的方法耗时都可以抓到。如何把app里面的所有都抓到?

通过正则表达式。

列子二:在方法前增加一些

@Aspect

public class AspectjxMine {

@Pointcut("execution(* com.test.MainActivity.clickMe(..))")

public void callMethod() {

}

@Around("callMethod()")//

    public void beforeMethodCall(ProceedingJoinPoint joinPoint) {

try {

Log.i("AspectjxMine", "callMethod before  ");

            joinPoint.proceed();

            Log.i("AspectjxMine", "callMethod after  ");

        }catch (Throwable throwable) {

throwable.printStackTrace();

        }

}

}

demo地址;

demo地址;https://github.com/pengcaihua123456/shennandadao/tree/master/AspectJx

总结:

1.配置可能会有问题

2.加入,打点写错了,编译都编译不过去的。

3.总是要删除.gradle文件缓存

集成的时候总是报各种错误。mmd

我的Android Studio 版本 3.6.2,如果代码不生效很有可能是Android Studio版本和aspectjx版本不兼容的问题

理解:提取公共的方法。

优点:解耦

举例:

实际生活中的例子:

优点:

(1)代码无侵入性,

(2)方便修改;

有demo

https://blog.csdn.net/LosingCarryJie/article/details/106195627

耗时打印:(有问题)

https://zhuanlan.zhihu.com/p/102627869

https://blog.csdn.net/BunnyCoffer/article/details/108102916

无痕埋点:

登入理解:

https://www.cnblogs.com/ganchuanpu/p/8594877.html

https://www.jianshu.com/p/e737c187e0c2

AOP得应用

1.耗时

2.埋点

3.登入

4.权限,方便的Android M动态权限配置框架

上一篇下一篇

猜你喜欢

热点阅读