如何获取WearableActivity中的LifecycleOwner?
How to get LifecycleOwner in WearableActivity?
我在尝试使用 WearableActivity 中的 LiveData 时遇到问题:
val livedata = ...
val observer = ...
livedata.observe(this, observer)
它在我使用 activity 扩展 AppCompatActivity 时有效,但看起来 WearableActivity 没有实现 LifecycleOwner 接口,尽管它确实拥有生命周期,对吧? (观察方法需要 LifecycleOwner 作为第一个参数)。我怎样才能让它发挥作用?
官方Android sample projects上显示的最新方法是扩展androidx.fragment.app.FragmentActivity
并实现AmbientModeSupport.AmbientCallbackProvider
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView will be the same as before
setContentView(R.layout.activity_main)
// Initialize yourCustomObserver here or have it injected
// FragmentActivity has getLifeCycle() so you get it for free
getLifeCycle().addObserver(yourCustomObserver);
}
就是这样,您不需要手动更新 LifecycleOwner(又名 Activity)生命周期状态。
上一个答案
根据 Karan Modi 之前的评论,您可以根据生命周期文档中的指南实施您自己的 getLifeCycle()
。
https://developer.android.com/topic/libraries/architecture/lifecycle.html#implementing-lco
具体来说,您可以实现自己的 LifeCycleOwner,如下所示:
public class MyActivity extends WearableActivity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}
@Override
public void onStart() {
super.onStart();
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
希望对您有所帮助。
我在尝试使用 WearableActivity 中的 LiveData 时遇到问题:
val livedata = ...
val observer = ...
livedata.observe(this, observer)
它在我使用 activity 扩展 AppCompatActivity 时有效,但看起来 WearableActivity 没有实现 LifecycleOwner 接口,尽管它确实拥有生命周期,对吧? (观察方法需要 LifecycleOwner 作为第一个参数)。我怎样才能让它发挥作用?
官方Android sample projects上显示的最新方法是扩展androidx.fragment.app.FragmentActivity
并实现AmbientModeSupport.AmbientCallbackProvider
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView will be the same as before
setContentView(R.layout.activity_main)
// Initialize yourCustomObserver here or have it injected
// FragmentActivity has getLifeCycle() so you get it for free
getLifeCycle().addObserver(yourCustomObserver);
}
就是这样,您不需要手动更新 LifecycleOwner(又名 Activity)生命周期状态。
上一个答案
根据 Karan Modi 之前的评论,您可以根据生命周期文档中的指南实施您自己的 getLifeCycle()
。
https://developer.android.com/topic/libraries/architecture/lifecycle.html#implementing-lco
具体来说,您可以实现自己的 LifeCycleOwner,如下所示:
public class MyActivity extends WearableActivity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}
@Override
public void onStart() {
super.onStart();
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
希望对您有所帮助。