首页 > 解决方案 > 需要所有设备制造商的Android通用后台调度任务运行器

问题描述

我需要每 12 小时从我的 Android 应用程序运行一次网络请求。我已经使用 Schedule Workmanager 来更新网络请求。它在我的 Android 三星 M40 设备和模拟器上完美运行,但是当我尝试使用其他一些设备(如华为、小米或 RealMe)时,它无法定期更新。

这是我的实现:

WorkManager mWorkManager;
                    mWorkManager = WorkManager.getInstance(context);
                    
                    Constraints constraints = new Constraints.Builder()
                            .setRequiredNetworkType(NetworkType.CONNECTED)
                            .build();


                    PeriodicWorkRequest periodicSyncDataWork =
                            new PeriodicWorkRequest.Builder(AccessTokenUpdateWorker.class, 12, TimeUnit.HOURS)
                                    .addTag("ACCESS_TOKEN_SYNC_DATA")
                                    .setConstraints(constraints)
                                    .setInitialDelay(5, TimeUnit.MINUTES)
                                    // setting a backoff on case the work needs to retry
                                    .setBackoffCriteria(BackoffPolicy.LINEAR, PeriodicWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
                                    .build();
                    mWorkManager.enqueueUniquePeriodicWork(
                            "ACCESS_TOKEN_SYNC_DATA",
                            ExistingPeriodicWorkPolicy.KEEP, //Existing Periodic Work policy
                            periodicSyncDataWork //work request
                    ); 

这是 AccessTokenUpdateWorker 代码:

public class AccessTokenUpdateWorker extends Worker {

    private Context context;
    private AppPreferenceHelper preferenceHelper;

    public AccessTokenUpdateWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
        this.context = context;
    }

    @NonNull
    @Override
    public Result doWork() {

        preferenceHelper = new AppPreferenceHelper(context);
        networkUpdate();
       
        return null;
    }

    private void networkUpdate() {
      ....
    }
}

标签: androidscheduled-tasksandroid-workmanager

解决方案


这是一些 Android OEM 的一个已知问题,他们大量修改 Android 的这一部分以进行电池优化 ( dontkillmyapp.com/ )。

除了将您的应用程序添加到 OEM 的允许列表之外,您实际上只能报告问题:

  • 给 OEM 以避免这种破坏性的变化。
  • 到 Google,在CTS中添加测试并避免 OEM 的这些行为。

WorkManager 是与您的应用程序捆绑在一起的库,具有与普通应用程序相同的约束。
来自 WorkManager 的问题跟踪器:是否支持中国制造商(华为、Oppo、小米……)?

您可以查看自动启动程序库,该库试图简化用户将应用程序添加到 OEM 许可列表的过程。


推荐阅读