当前位置: 首页 > 知识库问答 >
问题:

如何确保在Android N及以上版本的设备重新启动时调用PeriodicWorkRequests

宇文勇
2023-03-14

保证任务执行,即使应用程序或设备重新启动

在实现并测试了它之后,我尝试重新引导我的设备,并注意到日志消息和应用程序通知从未出现。

很自然,我做了一些研究,偶然发现:在android oreo中,设备重新启动后PeriodicWorkRequest无法工作

下面是我如何实现periodicWorkRequest

PeriodicWorkRequest request =
                new PeriodicWorkRequest.Builder(LocationListenerWorker.class,
                        12, HOURS)
                        .build();

        mWorkManager.enqueueUniquePeriodicWork(Constants.LOCATION_TASK_ID,
                ExistingPeriodicWorkPolicy.REPLACE, request);

我希望得到任何关于如何确保在运行API24+的设备上重新启动设备时也调用请求的帮助

共有1个答案

蒋波光
2023-03-14

假设您定义了一个RebootWorker类,该类扩展了Worker并在设备重新启动后执行某些特定的作业。第一种方法:

public class RebootWorker extends Worker {
...............................
}

在这种情况下,在清单中定义了此工作者

<service
    android:name=".RebootWorker"
    android:process=":worker"/> 

这将有助于让Workmanger在设备重新启动后运行worker服务。因为由于设备重新启动,您的应用程序将从任务管理器中清除。

public class MyReceiver extends BroadcastReceiver {
    WorkManager mWorkManager;
    PeriodicWorkRequest rebootRequest;

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(MainActivity.TAG, "intent.getAction(): "+intent.getAction());

        //Reboot worker
        mWorkManager = WorkManager.getInstance(context);
        rebootRequest = new PeriodicWorkRequest.Builder(RebootWorker.class,
                MainActivity.REPEAT_INTERVAL, MainActivity.TIME).build();

        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
           //do your work and enqueue it 
            mWorkManager.enqueue(rebootRequest);
}
}
}
 类似资料:
  • 我正在尝试从默认的android迁移到AppCompat-22.1中包含的新的android。到目前为止,我只需要导入包就可以使用它。 但我该怎么做呢?例如,更改正/负按钮颜色、标题颜色、消息颜色和背景颜色?

  • 我必须在每节课中不断点击nvm使用v.0.11.13: -

  • 本文向大家介绍在运行时检查设备上的Android版本,包括了在运行时检查设备上的Android版本的使用技巧和注意事项,需要的朋友参考一下 示例 Build.VERSION_CODES 是当前已知的SDK版本代码的枚举。 为了有条件地基于设备的Android版本运行代码,请使用TargetApi注释以避免Lint错误,并在运行特定于API级别的代码之前检查生成版本。 这是在支持低于23的API级别

  • Android设备是索尼xperia Z,4.3版本。 我想自动化本机计算器应用程序。 代码: 步骤: 1.将设备与系统连接,并使用adb devices命令检查-它显示我的设备已连接。 2.使用命令启动appium:

  • 我有广播接收器 但是服务不启动,当我启动我的设备日志log.d(“test”,“start”);不要显示我如何修复它?

  • 我的应用程序成功地自动启动了一些设备,如索尼Xperia,OnePlus3,Lyf,Micromax。但在小米却没有。然后我在StackOverflow上发现,我必须在小米内置的启动管理器中给我的app赋予自动启动权限。我也这样做过,但我的应用程序不能自动启动。以下是清单文件: