android - 有人可以提供一个好的 Listenable worker 示例吗?

标签 android android-service android-workmanager

我一直在研究 ListenableWorker使用新工作管理器创建服务的类。但我在任何地方都找不到任何例子。任何描述工作经理的来源,都给出了 Worker 的例子有一个不错的类doWork方法,但它不符合我的要求。所以我希望您能帮助我使用 ListenableWorker 编写一个不错的服务可以处理ListenableFuture
我已经尝试过 android 开发人员的文档,并且在他们的文档中,他们写过关于使用 guava 和使用并发 future 的文章,这两者都没有提供任何示例来编写简单的服务。我还观看了 workmanager 发布视频,其中谷歌工程师解释了新的 API,但他们的示例都在 Kotlin 中,我没有使用这些类。

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.concurrent.futures.CallbackToFutureAdapter;
import androidx.work.ListenableWorker;
import androidx.work.WorkerParameters;

import com.google.common.util.concurrent.ListenableFuture;


public class DistanceWorker extends ListenableWorker {

    public DistanceWorker(Context context, WorkerParameters workerParameters){
        super(context, workerParameters);
    }
    @NonNull
    @Override
    public ListenableFuture<Result> startWork() {
        //what to write here ?
    }
}

我只想返回一个 future ,并想知道当我的工作完成后如何解决或拒绝那个 future 。请帮助我理解它。

最佳答案

我也有关于如何使用 Kotlin 使用 ListenableWorkers 的问题。所以我建立了这个小例子来检索位置,我相信这是使用它的最常见的情况。

https://github.com/febaisi/ListenableWorkerExample

这是一个通用的基本用法(未经测试) - 我相信检查我的项目更容易,我在其中添加了完整的测试版本。
我从 Github 项目的 worker 中获取数据,在这里很难举例说明。

    //Enqueue work
    val anyWorkListenableWorker = OneTimeWorkRequest.Builder(AnyWorkListenableWorker::class.java).build()
    workManagerInstance.enqueueUniqueWork("ANY_WORK", ExistingWorkPolicy.KEEP, anyWorkListenableWorker)
class AnyWorkListenableWorker(appContext: Context, workerParams: WorkerParameters)
    : ListenableWorker(appContext, workerParams) {

    private val future : ResolvableFuture<Result> = ResolvableFuture.create()

    override fun startWork(): ListenableFuture<Result> {
        //MAIN THREAD

        CoroutineScope(Default).launch {
            //Launch scope to do work out of the main thread
            doAnyWork()
        }

        return future
    }

    private fun doAnyWork() {
        //Do long work
        future.set(Result.success())
    }
}

关于android - 有人可以提供一个好的 Listenable worker 示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56008522/

相关文章:

android - 用于后台位置更新的 IntentService

android - 工作管理器 : Why does failed unique work with the "APPEND" ExistingWork strategy not allow more work under the same name?

android - 当应用程序不在后台且自动启动选项被禁用时,JobScheduler 在小米中不起作用

android - 定位 S+(版本 31 及更高版本)要求在创建 PendingIntent、On AlarmPingSender 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一

java - Android java 如何连接到具有不同网络/IP 地址的服务器

javascript - 'setRemoteDescription'上执行 'RTCPeerConnection'失败 : Failed to set remote answer sdp

android - 清除 Activity 堆栈并从 Android 服务启动新 Activity

android - 当我使用 FLAG_ACTIVITY_SINGLE_TOP - onDestroy() 时,让我的 Activity 保持活跃

android - 将 onclicklistener 添加到 listview (android)

android - Pinterest 集成 Android