当设备重启并强制关闭应用程序时,Redmi 和其他自定义中文 ROM 中未收到 WorkManager doWork 回调

WorkManager doWork callback is not received in Redmi and other custom Chinese ROM when device got rebooted and force closed the app

当我的应用程序处于后台或被滑动杀死时,我的应用程序在 Redmi phones 中没有收到推送通知。

所以我试图通过 WorkManager 唤醒 phone,它可以在许多 phones 上工作,除了 Redmi 和其他中文自定义 ROM phones。

这是我的 Worker 代码 class

public class OpenTalkWorkManager extends Worker {

@NonNull
@Override
public Result doWork() {

    Log.i("wake_up", "Waking up now: " + System.currentTimeMillis());

    FirebaseUtils.getInstance().updateUserPresenceStatus(getApplicationContext(), "yes");

    Intent intent = new Intent("com.opentalk.WAKE_UP");
    getApplicationContext().sendBroadcast(intent);

    return Result.SUCCESS;
}

我正在尝试通过 PeriodicWorkRequest 对工作进行排队

PeriodicWorkRequest.Builder mPeriodicWorkRequest = new PeriodicWorkRequest.Builder(OpenTalkWorkManager.class, 4, TimeUnit.MINUTES);
    Constraints myConstraints = new Constraints.Builder()
            .setRequiresBatteryNotLow(false)
            .setRequiredNetworkType(NetworkType.NOT_REQUIRED)
            .setRequiresCharging(false)
            .setRequiresDeviceIdle(false)
            .setRequiresStorageNotLow(false)

            // Many other constraints are available, see the
            // Constraints.Builder reference
            .build();
    PeriodicWorkRequest myWork = mPeriodicWorkRequest.setConstraints(myConstraints).build();

    UUID compressionWorkId = myWork.getId();
    WorkManager.getInstance().cancelWorkById(compressionWorkId);

    WorkManager.getInstance().enqueue(myWork);

您使用的 WorkManager 是哪个版本?我们修复了一些与 PeriodicWorkalpha05 中的应用程序强制停止有关的错误。 alpha06 已过期,我建议您尝试使用它。如果您仍然遇到同样的问题,请在问题跟踪器上使用可重现的测试用例报告问题跟踪器。

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.WAKE_LOCK" />

在您的清单文件中添加这些权限可能会起作用。

WorkManager API 将像 Android Stock OS 设备或​​模拟器中记录的那样工作良好。小米、vivo 等自定义 ROM 默认将省电选项设置为 "optimized",并且不允许 WorkManager API。将 Battery Saver 设置为 "no restrictions",您的 WorkManager 将 运行 任务。

我使用的是 1.0.1 版本,在对省电模式进行上述更改后,它可以很好地与小米设备配合使用。

也请看看 小米、vivo、Oppo、华为默认限制后台服务。 应用此解决方案后,我的 WorkManager 也开始工作了。