使用FullLifecycleObserver时出现非法访问错误



我在我的项目中使用FullLifecycleObserver已经很长时间了,但最近在将我的应用程序的Android Gradle插件更新到7.0.2后,我遇到了以下崩溃。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.demo, PID: 463
java.lang.IllegalAccessError: Interface androidx.lifecycle.FullLifecycleObserver implemented by class com.myapp.AndroidXLifecycle$Wrapper is inaccessible (declaration of 'com.myapp.AndroidXLifecycle$Wrapper' appears in /data/app/~~7rat7QSnMLMmpeTBuQ9x4Q==/com.example.demo-NJOtI6dh-fR3aEGN-YGrjg==/base.apk)

在进一步的挖掘中,我发现Flutter开发人员也面临着这个问题,并声明Proguard文件中的更改对他们来说是有效的,如下所示:

-keep class androidx.lifecycle.FullLifecycleObserver

但这也没什么区别。

除了降级gradle插件版本之外,还有什么解决方案吗?

找到错误和解决方案。

错误:在Android Gradle插件更新后,访问FullLifecycleObserver一直是一个问题,因为使用它不会发出任何编译时警告,但会在运行时解决其类路径问题,因此会导致此错误。我在它的生命周期回调(onResume、onPause、onStop等(中使用了这个来处理生命周期观察器

解决方案:使用androidx.lifecycle.lifecycle.Event,这是一个指示生命周期不同状态的枚举,使用LifecycleEventObserver,它提供了onStateChanged回调,在该回调下生命周期。事件可以处理是一个很好的替代方案。我用过这个,现在我没有面临这个错误。

下面的示例代码:

public class MyLifecycle implements LifecycleEventObserver {
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull androidx.lifecycle.Lifecycle.Event event) {
switch (event){
case ON_CREATE:
break;
case ON_START:
break;
case ON_RESUME:
break;
case ON_PAUSE:
break;
case ON_STOP:
break;
case ON_DESTROY:
break;
case ON_ANY:
break;
}
}
}

最新更新