Я новичок в этом, я реализовал демо-ссылку из официального репозитория API диспетчеризации заданий Firebase.
Я хочу запускать определенную задачу каждые 2 минуты и вызывать Firebase, извлекать оттуда одно значение и обновлять свой TextView.
Что происходит, несколько раз я ждал 5 минут, но ничего не вызывается, я отлаживал приложение и обнаружил, что onStartJob()
не вызывается.
Много раз он звонил только один раз, а затем останавливался и больше не звонил.
Вот код:
DeviceSpaceService
public class DeviceSpaceService extends JobService {
private static final String TAG = "DeviceSpaceService";
private int val = 0;
@Override
public boolean onStartJob(final JobParameters job) {
Log.e(TAG, "onStartJob() called with: job = [" + job + "]");
// if (Build.VERSION.SDK_INT >= 18)
// Log.e("DEVICE_SPACE",
// "Free space is " +
// (statFs.getAvailableBlocksLong() * statFs.getBlockSizeLong() / 1024) + " Kb"
// );
new Thread(new Runnable() {
@Override
public void run() {
complteJob(job);
}
}).start();
return true;
}
private void complteJob(JobParameters job) {
if (val == 10) {
jobFinished(job, false);
return;
}
Home.setAndSend(String.valueOf(val));
val++;
Log.e(TAG, "complteJob() called with: job = [" + val + "]");
}
@Override
public boolean onStopJob(JobParameters job) {
Log.e(TAG, "onStopJob() called with: job = [" + job + "]");
return false;
}
}
Домашняя деятельность
public class Home extends AppCompatActivity {
static TextView tvMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
tvMain = (TextView) findViewById(R.id.tv_main);
//Added dispatcher object as it is must to diapatch the job declared.
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job job = dispatcher.newJobBuilder().setLifetime(Lifetime.UNTIL_NEXT_BOOT)
.setService(DeviceSpaceService.class).setTag("DeviceSpaceCheck").setRecurring(true).setReplaceCurrent(false)
.setTrigger(Trigger.executionWindow(0,120)).build();
dispatcher.mustSchedule(job);
}
public static void setAndSend(String val) {
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message" + val);
myRef.setValue("Hello, World!" + val);
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (tvMain != null)
tvMain.setText(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}