如何在没有重写方法的情况下对Activity onPause使用@Before

时间:2016-02-07 12:46:28

标签: aspectj

@Before("execution(*  android.app.Activity.onPause(..))")
public void postOnPause(JoinPoint thisJoinPoint) {
    Activity activity = (Activity) thisJoinPoint.getTarget();
    Log.d("TEST", "YAY Activity paused");
}

如果我在MainActivity中覆盖:

,这会很有效
  @Override
    protected void onPause() {
        super.onPause();
    }

有没有办法在没有添加覆盖的情况下解决这个问题?因为超类Activity仍然应该定义该方法,并且应该运行,即使子类没有实现它。

这可能吗?

1 个答案:

答案 0 :(得分:2)

免责声明:我不是Android开发人员,我的答案将解释基本的AspectJ机制。

正如 Aaron他在指向my other answer时已经说过的那样,您需要在运行时通过LTW(加载时编织)检测包含基类的上游JAR或编织它在编译期间通过二进制编织。

如果是你自己的代码调用onPause,你可以使用call()切入点而不是execution(),但是框架可能会发出调用,这使得这个选项成为一个糟糕的选择。