如何在不覆盖方法的情况下在 Activity onPause 上使用 @Before

How to use @Before on Activity onPause without overriding method

@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 仍然应该定义该方法并且应该是 运行 即使子类还没有实现它。

这可能吗?

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

正如 Aaron He 在将您指向 my other answer 时已经说过的,您要么需要在运行时通过 LTW 检测包含基础 class 的上游 JAR (加载时织入)或通过二进制织入在编译时织入。

如果是您自己的代码调用 onPause,您可以只使用 call() 切入点而不是 execution(),但可能是框架发出调用,使此选项成为一个错误选择.