如何在不覆盖方法的情况下在 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()
,但可能是框架发出调用,使此选项成为一个错误选择.
@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()
,但可能是框架发出调用,使此选项成为一个错误选择.