gpt4 book ai didi

android - Android : pointcut call(* Activity. onCreate(..)) 中的 AspectJ 未挑选出 Activity.onCreate() 调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:12 26 4
gpt4 key购买 nike


我在我的 Android 项目中使用 AspectJ,我想编写一个 pointcut 来捕获对 onCreate() 的所有调用>onDestroy() 我的 Activity 。我对 AspectJ 很陌生,所以我可能在这里遗漏了一些东西,但为什么会这样:
切入点 createActivity(Activity a) : target(a) && execution(* Activity.onCreate(..)) && within(com.test.activities..*);
有效,这个:
target(a) && call(* Activity.onCreate(..)) && within(com.test.activities..*);
不起作用?

最佳答案

很高兴看到其他人探索 aspectJ 和 Android :-)

在 android 中使用 aspectJ 时,您只能进行编译时编织,这基本上意味着您只能拦截您自己的代码。

第一个示例之所以有效,是因为在使用 execution() 切入点时,代码被编织到您的 Activitiy.onCreate()“内部”。

第二个示例不起作用,因为必须将建议编织到调用 Activity 的 onCreate 的方法中。这可能类似于您无法修改的 ActivityManager。

作为引用,这是我在开发中使用的:

public aspect LogAspect {

public String ATAG = "LogAspect";

pointcut tolog1() : execution(* Activity+.*(..)) ;
before() : tolog1() {
String method = thisJoinPoint.getSignature().toShortString();

Log.d(ATAG, "=========== entering " + method+", parms="+Arrays.toString(thisJoinPoint.getArgs()));
}

}

关于android - Android : pointcut call(* Activity. onCreate(..)) 中的 AspectJ 未挑选出 Activity.onCreate() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6356375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com