java - 实现作业调度程序

标签 java android firebase-realtime-database firebase-job-dispatcher

我正在尝试按照本教程为我的项目实现作业调度程序 https://github.com/googlearchive/firebase-jobdispatcher-android但不明白如何安排这项工作,或者它不起作用。

我想每周周六展示挑战;从 Firebase 数据库获取挑战。

我尝试了下面的代码,但它不起作用。

有人可以指导我吗?有任何文章/文档有助于理解这个概念吗?

挑战.服务

 public class ChallengeService extends JobService {
        public static final String TAG = "ChallengeService";
        @Override
        public boolean onStartJob(final JobParameters job) {
            Log.d(TAG, "completeJob: " + "jobStarted");
            new Thread(new Runnable() {
                @Override
                public void run() {
                    codeYouWantToRun(job);
                }
            }).start();
            return true;
        }
        @Override
        public boolean onStopJob(JobParameters job) {
            return false;
        }
        public void codeYouWantToRun(final JobParameters parameters) {
            try {
                Log.d(TAG, "completeJob: " + "jobStarted");
                //This task takes 2 seconds to complete.
                Thread.sleep(2000);
                Calendar mCalendar = Calendar.getInstance();
                final String mWeekofyear = String.valueOf(getWeekOfYear(mCalendar));
                Log.d("ChallengeService", "mWeekofyear:: " + mWeekofyear);
                FirebaseDatabase database = FirebaseDatabase.getInstance();
                DatabaseReference myRef = database.getReference().child("Challenges").child(mWeekofyear);
                myRef.keepSynced(true);
                myRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        String mChallengeOfWeek = dataSnapshot.getValue(Challenge.class).getName();
                        Log.d(TAG, "mChallengeOfWeek: " + mChallengeOfWeek);
                    }
                    @Override
                    public void onCancelled(DatabaseError error) {
                        Log.w(TAG, "Failed to read value.", error.toException());
                    }
                });
                Log.d(TAG, "completeJob: " + "jobFinished");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                jobFinished(parameters, true);
            }
        }
        private int getWeekOfYear(Calendar mCalendar) {
            return mCalendar.get(Calendar.WEEK_OF_YEAR);
        }
    }

主 fragment

if (mDayName.equals("Saturday")) {
                    scheduleJob(this);
                }

private static void scheduleJob(Context context) {
        FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
        Job job = createJob(dispatcher);
        dispatcher.mustSchedule(job);
        Log.d(TAG,"job::"+job);
    }
    private static Job createJob(FirebaseJobDispatcher dispatcher) {
        Job job = dispatcher.newJobBuilder()
                .setLifetime(Lifetime.FOREVER)
                .setService(ChallengeService.class)
                .setTag("UniqueTagForYourJob")
                .setReplaceCurrent(false)
                .setRecurring(true)
                .setTrigger(Trigger.executionWindow(30, 60))
                .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
                .setConstraints(Constraint.ON_ANY_NETWORK, Constraint.DEVICE_CHARGING)
                .build();
        return job;
    }

最佳答案

您是否将 ChallengeService 添加到 list 文件并通过 android.permission.BIND_JOB_SERVICE 权限保护它?

<service android:name="ChallengeService"
              android:permission="android.permission.BIND_JOB_SERVICE" >
         ...
</service>

JobService 也已弃用,您可以使用 Android Jetpack WorkManager 代替。

这是入门指南 https://developer.android.com/topic/libraries/architecture/workmanager/basics

关于java - 实现作业调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61631385/

相关文章:

java - 仅显示来自 eclipse 中某些文件夹的警告

Android:具有变速 API 23 的视频

firebase - 如何在 Firebase 3.x 中禁用注册

java - 调用 startActivityForResult 时应用程序崩溃

ios - Firebase Chat App - 超时后停止输入指示器

swift - 如何从 Firebase 中检索手动输入的数据?

java - 寻找 JSON 中的最大/最小值

java - 使用 jxl for java 指定 WritableHyperlink 的单元格格式

java - mks-integrity xmlapi 的不同输出

android - 如何从接收器类的另一个 Activity 调用方法?