代码之家  ›  专栏  ›  技术社区  ›  Ashish Khurange

Android Oreo workmanager周期工作不工作

  •  1
  • Ashish Khurange  · 技术社区  · 7 年前

    Android版本:8.1.0

    设备:Infinix X604B

    Workmanager:1.0.0-alpha11(最新版本)

    工作请求每15分钟运行一次,持续大约一小时。然后PeriodicWorkRequest停止工作。在8小时内,后台工作根本没有安排好。我没有杀我的应用程序,它是在后台。

    当我将应用程序恢复到前台周期时,workrequest将再次运行后台任务。类似的经验,我把我的应用程序放在后台后没有重复。

    这是我的工人阶级样本。

    class TestWorker extends Worker {
    public TestWorker(
            @NonNull Context context,
            @NonNull WorkerParameters params) {
        super(context, params);
    }
    
    @NonNull
    @Override
    public Result doWork() {
        // Adding timestamp of background execution to firestore.
        Map<String, String> value = new TreeMap<>();
        SimpleDateFormat df = new SimpleDateFormat("hh:mm");
        String dateFormat = df.format(Calendar.getInstance().getTime());
        value.put("time", dateFormat);
        FirebaseFirestore.getInstance()
                .collection("my-collection")
                .add(value);
        return Result.SUCCESS;
    }
    

    }

    PeriodicWorkRequest.Builder testBuilder =
        new PeriodicWorkRequest.Builder(TestWorker.class, 15,
                                        TimeUnit.MINUTES);
    
    PeriodicWorkRequest testWork = testBuilder.build();
    WorkManager.getInstance().enqueue(testWork);
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Jeel Vankhede    7 年前

    你可以从如下独特的周期性工作开始,

    WorkManager.getInstance().enqueueUniquePeriodicWork(UNIQUE_ID, ExistingPeriodicWorkPolicy.REPLACE, testWork);
    

    在这里, UNIQUE_ID 字符串 这将检查您的工作线程的唯一性,并替换现有的工作线程(如果它已经存在于定期工作的队列中)。

    签出工作者策略 here

    不要忘记将相同的标记添加到工作实例中,例如:

    PeriodicWorkRequest.Builder testBuilder =
    new PeriodicWorkRequest.Builder(TestWorker.class, 15, TimeUnit.MINUTES);
    PeriodicWorkRequest testWork = testBuilder.addTag(UNIQUE_ID).build(); // Set the same string tag for worker.
    
        2
  •  0
  •   Rajesh Naddy    6 年前

    我最近处理了PeriodicWorkRequest,知道Workmanager在 安卓.arch 还有一些问题还没有解决。然后我查阅了有关androidX的文档( this

    简单地说, “android.arch.work:work运行时:1.x.x” 到目前为止(直到我们有一个稳定的释放)没有工作的保证。试一试 这肯定管用。

    请查阅文档以作进一步参考。 this .

    注:

    Android Studio(v3.4.1)工具栏->重构->迁移到AndroidX