Диспетчер заданий Firebase вызывается только один раз

Я новичок в этом, я реализовал демо-ссылку из официального репозитория 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) {

            }
        });
    }
}

person TapanHP    schedule 04.04.2017    source источник
comment
Попробуйте передать true в качестве второго параметра в метод jobFinished().   -  person dzikovskyy    schedule 01.07.2017