LMK(低内存杀手)杀死应用程序后如何重新启动工作管理器

问题描述 投票:0回答:1

当应用程序未运行时从广播接收器启动 workManger 它工作正常,但是当内存较低时(忽略为什么它低,它只是低)工作管理器的 doWork/wholeApplication 进程现在被杀死,有什么方法可以重新启动同一个工作人员。

有些人可能会告诉返回 Result.retry();但这只有在我们返回它时才有效,但是当执行突然停止时,似乎无法返回它。

        OneTimeWorkRequest workRequest =
                new OneTimeWorkRequest.Builder(Worker.class)
                        //.setInitialDelay(15, TimeUnit.MINUTES)
                        //.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
                        .setBackoffCriteria(
                                BackoffPolicy.EXPONENTIAL,
                                5,
                                TimeUnit.MINUTES
                        )
                        .build();

前台服务将无法工作,因为它无法以其他方式从广播启动?

android android-workmanager foreground-service android-backup-service
1个回答
0
投票

这就是我最后的做法,所以我基本上使用了定期工作管理器,它将每 15 分钟后重复执行一次,除非手动取消。

所以我所做的是,如果我的工作执行完成而没有遇到任何内存不足的问题,我最后会取消该工作。在内存不足且工作未完全执行的情况下,相同的工作管理器将在 15 分钟后重新启动。

PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(
                YourWorkClass.class,
                15,
                TimeUnit.MINUTES)
                .addTag("yourTagName")
                .build();


        WorkManager.getInstance(context)
                .enqueueUniquePeriodicWork(
                "someName",
                ExistingPeriodicWorkPolicy.REPLACE,periodicWorkRequest
        );

//and to stop the work 

WorkManager.getInstance(getApplicationContext()).cancelAllWorkByTag("yourTagName");


© www.soinside.com 2019 - 2024. All rights reserved.