主页

实现功能:程序被结束后 ,在有自启权限的情况下,自动唤醒app。
正常打开(自动启动服务)->注册任务管理->用户方法->程序被结束(异常结束,系统强制结束)[已停止运行]->WorkManager执行doWork方法[可以添加启动服务等代码]->服务正常运行

添加implementation "androidx.work:work-runtime:2.7.0"依赖

在窗口onCreate或者程序application onCreate里面加入下面的任务管理初始化代码,以保证服务正常。

try { WorkManager.initialize(getApplicationContext(), new Configuration.Builder().build()); }catch (Exception ignore){}

然后添加类

public class MyWorker extends Worker {
    public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Result doWork() {
        // 在这里执行后台任务逻辑
        // 返回 Result.success() 表示任务执行成功,返回 Result.failure() 表示任务执行失败
        return Result.success();
    }
}

下面两种可以任选一种

// 创建 WorkRequest 对象,可以是 OneTimeWorkRequest 或 PeriodicWorkRequest
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
        .setInitialDelay(10, TimeUnit.MINUTES) // 可选,设置任务初始延迟
        .build();

// 提交 WorkRequest 对象给 WorkManager 进行调度
WorkManager.getInstance(context).enqueue(workRequest);

下面的代码是保证任务只被加入计划一次,不然任务列表里一堆重复任务。

OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
                .setInitialDelay(60, TimeUnit.SECONDS) // 可选,设置任务初始延迟
                .build();

// 提交 WorkRequest 对象给 WorkManager 进行调度
        WorkManager.getInstance(this).enqueueUniqueWork("restart",ExistingWorkPolicy.REPLACE,workRequest);

        System.out.println("定时唤醒已设置");

如果想要获取任务的执行结果,可以执行下面的代码

WorkManager.getInstance(context).getWorkInfoByIdLiveData(workRequest.getId())
        .observe(lifecycleOwner, workInfo -> {
            if (workInfo != null && workInfo.getState() == WorkInfo.State.SUCCEEDED) {
                // 任务执行成功
            } else if (workInfo != null && workInfo.getState() == WorkInfo.State.FAILED) {
                // 任务执行失败
            }
        });











orkManager 使用了多种技术来实现后台任务的调度和保持运行的能力,具体取决于设备和系统版本。以下是一些 WorkManager 使用的关键技术:

JobScheduler:在 Android 5.0(API 级别 21)及以上版本中,WorkManager 使用了 JobScheduler API 来调度后台任务。JobScheduler 具有系统级别的优化,可以根据系统资源和电池状况动态调整任务的执行时间。WorkManager 利用了 JobScheduler 的优势,并提供了一个稳定且兼容各种设备的后台任务调度解决方案。

AlarmManager:在 Android 4.4(API 级别 19)及以下版本中,WorkManager 使用了 AlarmManager 来触发后台任务。它会利用 AlarmManager 设置闹钟,并在闹钟触发时执行后台任务。这种机制在旧版本的 Android 上提供了后台任务调度的能力。

BroadcastReceiver:WorkManager 还使用了 BroadcastReceiver 来监听设备的启动广播(BOOT_COMPLETED),以便在设备启动后重新调度未完成的任务。这确保了即使设备重新启动,仍然可以继续执行之前安排的任务。

通过使用这些技术和适当的调度策略,WorkManager 能够保持后台任务的执行,并确保任务的稳定性和节能性。它结合了系统级别的调度优化和跨设备的兼容性,提供了一种强大而可靠的后台任务调度解决方案。

android 保活 java

版权属于:WANYL
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
0

目录

来自 《android 定时唤醒【保活方法】》
评论

WANYL

博主很懒,啥都没有
123 文章数
0 评论量
11 分类数
124 页面数
已在风雨中度过 3年289天18小时6分