【问题标题】:AspectJ in Android: pointcut call(* Activity.onCreate(..)) doesn't pick out Activity.onCreate() callsAndroid 中的 AspectJ:切入点调用(* Activity.onCreate(..)) 不会选择 Activity.onCreate() 调用
【发布时间】:2011-06-15 10:33:57
【问题描述】:


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

【问题讨论】:

    标签: android aop aspectj


    【解决方案1】:

    很高兴看到其他人涉足 aspectJ 和 Android :-)

    在android中使用aspectJ时,您仅限于编译时编织,这基本上意味着您只能拦截您拥有的代码。

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

    第二个示例不起作用,因为必须将建议编织到调用活动的 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()));
        }
    
    }
    

    【讨论】:

    • 非常感谢!这说明了一切。我真的很喜欢 AspectJ,但我希望 AJDT 不是那么脆弱。使用它真的很痛苦,至少在做 Android 开发时是这样。
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多