Kap*_*arg 6 android android-service android-workmanager
我一直在深入研究ListenableWorker
课程以使用新的工作经理创建服务。但我在任何地方都找不到任何例子。任何描述工作经理的来源,都提供了Worker
具有很好doWork
方法但不符合我的要求的类的示例。所以我想要你的帮助来编写一个很好的服务,使用ListenableWorker
它可以处理ListenableFuture
我已经尝试过android开发人员的文档,并且在他们的文档中,他们写了关于使用番石榴和使用并发未来的文章,这两者都没有提供任何编写简单服务的示例。我还观看了谷歌工程师解释新 API 的 workmanager 发布视频,但他们的示例都在 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 ?
}
}
Run Code Online (Sandbox Code Playgroud)
我只想返回一个未来,并想知道当我的工作完成后如何解决或拒绝这个未来。请帮助我理解它。
我也有关于如何使用 Kotlin 使用 ListenableWorkers 的问题。所以我构建了这个小例子来检索位置,我相信这是最常见的使用情况。
https://github.com/febaisi/ListenableWorkerExample
这是一个通用的基本用法(未测试) - 我相信检查我的项目在我添加完整测试版本的地方更容易。我从 Github 项目中的工人那里获取数据,在这里很难举例说明。
//Enqueue work
val anyWorkListenableWorker = OneTimeWorkRequest.Builder(AnyWorkListenableWorker::class.java).build()
workManagerInstance.enqueueUniqueWork("ANY_WORK", ExistingWorkPolicy.KEEP, anyWorkListenableWorker)
Run Code Online (Sandbox Code Playgroud)
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())
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做
override fun startWork(): ListenableFuture<ListenableWorker.Result> {
// Do your work here
return CallbackToFutureAdapter.getFuture {
it.set(Result.success())
}
}
Run Code Online (Sandbox Code Playgroud)
Rah*_*hul -2
Worker
,CoroutineWorker
或者RxWorker
都是ListenableWorker
s。这是来源的链接:
归档时间: |
|
查看次数: |
3897 次 |
最近记录: |