如何从Aspect中引用Activity

时间:2016-08-16 04:46:39

标签: android android-activity aop aspectj aspect

我目前有当前的方面

@Aspect
public class ActivityShowingAspect {

    private static final String POINTCUT_METHOD =
            "execution(@nz.co.kevinsahandsomedevil.android.myaccount.aspect.ActivityMustBeShowing * *(..))";

    @Pointcut(POINTCUT_METHOD)
    public void methodAnnotatedWithActivityShowing() {
    }

    @Around("methodAnnotatedWithActivityShowing()")
    public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
        Activity activity = // code to retrieve the calling activity, joinPoint.getTarget() or whatever
        Object result = null;
        if(!activity.isFinishing()) {
            result = joinPoint.proceed();
        } else {
            result = // do something else
        }
        return result;
    }

}

我想知道如何从Aspect中确定调用Activity

1 个答案:

答案 0 :(得分:1)

好的,这取决于注释方法的位置。

如果在Activity实现中声明了带注释的方法,那么您确实可以调用joinpoint.getTarget()并转换结果。

此外,您可能希望更新切入点以确保该方法确实在某个活动上:

 execution(@nz.co.vodafone.android.myaccount.aspect.ActivityMustBeShowing * *(..)) && within(android.app.Activity+)

如果情况并非如此,那么您可能需要在任何活动onResume()之前添加建议,以便记住当前活动的内容。