【问题标题】:Need Android universal background schedule task runner for all device manufacturers需要所有设备制造商的Android通用后台调度任务运行器
【发布时间】:2021-03-08 01:11:12
【问题描述】:

我需要每 12 小时从我的 Android 应用运行一次网络请求。我已经使用 Schedule Workmanager 来更新网络请求。它在我的 Android Samsung 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() {
      ....
    }
}

【问题讨论】:

    标签: android scheduled-tasks android-workmanager


    【解决方案1】:

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

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

    • 致 OEM 以避免此类重大更改。
    • Google,在CTS 中添加测试并避免 OEM 的这些行为。

    WorkManager 是与您的应用程序捆绑在一起的库,具有与普通应用程序相同的约束。
    来自 WorkManager 的问题跟踪器:are the Chinese manufacturers (Huawei, Oppo, Xiaomi...) supported?

    您可以查看autostarter library,它试图简化用户将应用程序添加到 OEM 许可名单的过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多