如何在Service类中使用LifecycleOwner?

14

我想使用Service类中的LiveData选择Room数据库上的数据。当观察它时,如何将LifecycleOwner强制转换为正确类型?

repositoryDatabase.getTimeline().observe(this, timelineList -> {
    if (timelineList != null && timelineList.size() >= 10) {
        JSONArray arrayTimeline = new JSONArray();
        for (TimelineEntity timeline : timelineList) {
            JSONObject objectTimeline = new JSONObject();
            try {
                objectTimeline.put("doku", timeline.getIdDokumen());
                objectTimeline.put("entrydate", timeline.getEntryDate());
                objectTimeline.put("lat", timeline.getLat());
                objectTimeline.put("lng", timeline.getLng());

                arrayTimeline.put(objectTimeline);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        onUpdateLocation(arrayTimeline.toString());
    }
});
3个回答

22

您可以这样使用 LifecycleService:

将以下依赖项添加到您的app/build.gradle文件中:

dependencies {
    implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
}

使用LifecycleService扩展您的服务:

class MyService extends LifecycleService {

    ...
}

之后您将能够观察到您的LiveData


6
将以下依赖项添加到您的 app/build.gradle 文件中:
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

根据androidx.lifecycle发布页的介绍:
版本2.2.0于2020年1月22日发布,与 2.1.0相比,有以下重要更改: lifecycle-extensions库已被弃用:随着ViewModelProviders.of()方法的弃用,此版本标记了整个lifecycle-extensions库的弃用。我们强烈建议依赖于您需要的特定Lifecycle库(例如,如果您使用LifecycleService,则使用lifecycle-service库;如果您使用ProcessLifecycleOwner,则使用lifecycle-process库),而不是依赖于lifecycle-extensions库,因为不会发布未来的2.3.0版本的lifecycle-extensions库。

1

添加依赖

implementation "androidx.lifecycle:lifecycle-service:2.2.0"

如果您已经扩展了service(),则应将其删除并扩展LifecycleService()

现在您的服务应该像这样:

class MyService() : LifecycleService() {
    //CODE
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接