我正在尝试按照本教程为我的项目实现作业调度程序 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/