我有一个正在使用生命周期库的应用程序,但我收到一个 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/