I am using AspectJ in my Android project and I'd like to write a pointcut
that catches all the calls to onCreate()
and onDestroy()
of my activities. I am quite new to AspectJ, so probably I am missing something here but why this:
pointcut createActivity(Activity a) : target(a) && execution(* Activity.onCreate(..)) && within(com.test.activities..*);
works and this:
target(a) && call(* Activity.onCreate(..)) && within(com.test.activities..*);
doesn't work?
Asked
Active
Viewed 3,713 times
8

futtetennista
- 1,876
- 1
- 20
- 33
1 Answers
12
Nice to see other people adventuring into aspectJ and Android :-)
When using aspectJ with android you are limited to compile-time weaving, which basically means that you can only intercept code you own.
The first example works because when using the execution() pointcut the code gets weaved "inside" your Activitiy.onCreate().
The second example does not work, because the advice would have to get weaved into the methods that call your activity's onCreate. That's probably something like the ActivityManager that you cannot modify.
As a reference, here's what I use in development:
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()));
}
}

anjosc
- 923
- 7
- 13
-
Thanks very much! That explains it all. I really like AspectJ but I wished the AJDT wasn't SO flaky. It is a real pain to use it, at least when doing Android development. – futtetennista Jun 17 '11 at 07:30