2016-08-16 10 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 привет отредактировал вопрос - я на самом деле спрашиваю, как получить активность изнутри. Был смущен, прочитав его снова. –

ответ

1

Хорошо, так что это зависит от того, где находится метод с вашей аннотацией.

Если аннотированный метод объявлен в рамках реализации Activity, то вы действительно можете позвонить joinpoint.getTarget() и нанести результат.

Кроме того, вы можете обновить Pointcut, чтобы убедиться, что метод действительно находится на деятельности:

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

Если это не так, то вам может понадобиться добавить совет, прежде чем какой-либо данный вид деятельности onResume() запомнить какова текущая деятельность.

+0

Спасибо - я не собираюсь ограничивать его в рамках Activity, так как я планирую назвать его также внутри Fragments, но это имеет смысл. Просто быстрое наблюдение; что должно быть моим «результатом» внутри 'else'? (код выше) –

+1

Ну, это зависит от типа, перенаправленного вашим методом, поэтому вы, вероятно, хотите либо вернуть null (который охватывает любой объект), либо добавить параметр в свою аннотацию, чтобы установить возвращаемое по умолчанию значение: @ActivityMustBeShowing (defaultValue = "foo") – XGouchet

 Смежные вопросы

  • Нет связанных вопросов^_^