如何从方面内引用 Activity

How to reference an Activity from within an 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;
    }

}

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

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

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

您可能还想更新切入点以确保该方法确实在 activity 上:

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

如果不是这种情况,那么您可能需要在任何 activity 的 onResume() 之前添加一条建议,以记住当前的 activity 是什么。