Android 生命周期库 : Cannot add the same observer with different lifecycles

标签 android android-lifecycle

我有一个正在使用生命周期库的应用程序,但我收到一个 IllegalArgumentException,提示“无法添加具有不同生命周期的相同观察者”我只在我认为安全的 onCreate 中添加观察者。我的大多数观察者都是通过匿名类添加的,我认为这不是这里的问题,因为观察者永远不会被回收。一种是使用 this:

private GpsState gpsState;

void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getLifecycle().addObserver(gpsState);
    gpsState.observe(this, (state) -> {
        // ...
    });
}

在此示例中,GpsState 扩展了 LiveData 以提供 GPS 的当前状态,并实现 LifecycleObserver 以在到达时能够刷新某些值ON_RESUME 状态。

知道我可能做错了什么吗?

最佳答案

在我的例子中,问题出在观察者的 lambda 方法是空的。我只是试图向它添加一些东西,问题就解决了。例如:

gpsState.observe(this, (state) -> {
                Log.d(this.getClass().getSimpleName(), BaseNavigationActivity.this.toString());

});

很可能 JVM 定义了仅使用静态引用的匿名类,对于这种情况,它变成了单例,因此您在引用此类时将始终拥有相同的实例。

关于Android 生命周期库 : Cannot add the same observer with different lifecycles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47025233/

相关文章:

android - CacheManager.getCacheFileBaseDir() 总是返回 null

java - Android - 二进制 XML 文件行 #19 : Error inflating class fragment

Android - 如何在 UI 上嵌入进度对话框?

android - 当我们从 Android 的外部应用程序手动更改权限时会发生什么

android - 在 onPause 而不是 onDestroy 中释放资源

android - 如何使用 ViewModel 存储位图列表以便在生命周期变化中生存?

android - com.facebook.Settings.publishInstallAsync 是否适用于 Android < 3.0

android - 在 Android 上,我可以注册一个回调来告诉我蓝牙是打开还是关闭吗?

android - 当 Fragment onActivityCreated 调用时

android - onActivityResult() Intent 数据始终为空