【问题标题】:What are the appropriate places to call different scheduling android components调用不同调度android组件的合适位置是什么
【发布时间】:2019-06-14 14:56:00
【问题描述】:

我需要知道我应该使用哪个 android 组件来安排任务,我需要执行一个任务,该任务将在每 3 分钟内从服务器更新应用程序数据(因此我不能使用 JobScheduler 或 SyncAdapter 两者都限制为至少 15分钟轮询间隔)。

那么最好的选择是什么?

  1. 定时器任务
  2. 处理程序
  3. 线程池执行器
  4. ScheduledThreadPoolExecutor

如果可能,请详细说明我们应该在哪里使用这些组件。

【问题讨论】:

    标签: android multithreading scheduled-tasks timertask


    【解决方案1】:

    您可以使用 Evernote 中的 Android-Job

    implementation 'com.evernote:android-job:1.2.6'
    

    Android 实用程序库,用于在后台运行延迟的作业。 根据 Android 版本,JobScheduler、GcmNetworkManager 或 AlarmManager 会被使用

    用法 JobManager 类用作入口点。 您的作业需要扩展类 Job。 使用相应的构建器类创建一个 JobRequest,并使用 JobManager 安排此请求。

    在您可以使用 JobManager 之前,您必须初始化单例。 您需要提供一个 Context 并在此之后添加一个 JobCreator 实现。

    JobCreator 将作业标签映射到特定的作业类。建议在您的 Application 对象的 onCreate() 方法中初始化 JobManager,但如果您无权访问 Application 类,还有一个替代方法。

    public class App extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            JobManager.create(this).addJobCreator(new DemoJobCreator());
        }
    }
    
    public class DemoJobCreator implements JobCreator {
    
        @Override
        @Nullable
        public Job create(@NonNull String tag) {
            switch (tag) {
                case DemoSyncJob.TAG:
                    return new DemoSyncJob();
                default:
                    return null;
            }
        }
    }
    

    之后您就可以开始安排作业了。

    public class DemoSyncJob extends Job {
    
        public static final String TAG = "job_demo_tag";
    
        @Override
        @NonNull
        protected Result onRunJob(Params params) {
            // run your job here
            return Result.SUCCESS;
        }
    
        public static void scheduleJob() {
            new JobRequest.Builder(DemoSyncJob.TAG)
                    .setExecutionWindow(30_000L, 40_000L)
                    .build()
                    .schedule();
        }
    }
    

    这是 android 中的 Default Job Scheduler 的高级版本,比默认的具有很多限制和向后兼容性的功能。

    【讨论】:

      最近更新 更多