android - 如何获取WearableActivity中的LifecycleOwner?

标签 android kotlin android-room android-livedata

当我尝试使用 Wea​​rableActivity 中的 LiveData 时遇到问题:

val livedata = ...
val observer = ...
livedata.observe(this, observer)

当我处理扩展 AppCompatActivity 的 Activity 时它起作用了,但它看起来像 WearableActivity 没有实现 LifecycleOwner 接口(interface),尽管它确实拥有一个生命周期,对吧? (观察方法需要 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;
    }
}

希望这对您有所帮助。

关于android - 如何获取WearableActivity中的LifecycleOwner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48260060/

相关文章:

Android sqlite getdatabase 递归调用

gradle - 依赖 JVM 中的 Kotlin Multiplatform JS 模块

android - 表间关系问题

Android 房间数据库表未更新

java - 在 Spinner 上执行 click 事件以执行 onItemSelected 中的代码

android - 在 API 19 上获取 Class Cast Exception 但在 API 21 上工作正常

java - Android 中 Edittext 的实时搜索机制?

Kotlin 协程在启动和回调时不会执行

java - Kotlin:泛型和方差

Android Studio 数据库检查器始终将数据库显示为 "closed"