2016-08-16 7 views
0

내에서 활동을 참조하는 나는 현재 현재 측면을어떻게 화면

@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을 확인하는 방법을 알고 싶습니다

있습니다.

+0

코드에서'! activity.isFinishing()'을 사용하여 이미 그렇게하고 있지 않습니까? 마무리하지 않는 것에 대해 더 잘 설명 할 수 있습니까? – XGouchet

+0

@XGouchet hi는 질문을 편집했습니다. 실제로 측면에서 활동을 검색하는 방법을 묻습니다. 다시 읽은 후에 혼란 스러웠습니다. –

답변

1

좋아, 따라서 주석이있는 메소드의 위치에 따라 다릅니다.

주석이 달린 메소드가 Activity 구현 내에서 선언 된 경우 실제로는 joinpoint.getTarget()을 호출하고 결과를 캐스팅 할 수 있습니다. 그 다음 모든 활동의 onResume() 기억하기 전에 조언을 추가해야하는 경우가 아니라면

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

:

또한이 방법은 참으로 활동이 있는지 확인 포인트 컷을 업데이트 할 수 있습니다 현재 활동이 무엇인지.

+0

감사합니다. 저는 Fragments 내에서 그것을 호출 할 계획이므로 Activity 내에서 제한하지 않을 것입니다.하지만 그건 의미가 있습니다. 빠른 후속 조치. 'else' 내에서'result'는 무엇이되어야합니까? (위의 코드) –

+1

글쎄 그것은 당신의 메소드에 의해 리다이렉트 된 타입에 달려있다. 그래서 당신은 아마도 어떤 객체를 커버하는 null을 리턴하기를 원하거나 주석에 매개 변수를 추가하여 반환 할 디폴트 값을 설정하기를 원할 것이다. @ActivityMustBeShowing (defaultValue = "foo") – XGouchet