Programe o trabalho recorrente usando um exrequestr de trabalho de firebase

Estou tentando publicair a localization do dispositivo Android no server a cada 10 minutos. Estou usando o dispêndio de trabalho da Firebase paira fazer isso

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriview(this)); Job myJob = dispatcher.newJobBuilder() .setService(UpdateLocationService.class) .setRecurring(true) .setTrigger(Trigger.executionWindow(10, 20)) .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR) .setTag("location-update-job") .setLifetime(Lifetime.FOREVER) .build(); dispatcher.mustSchedule(myJob); 

UpdateLocationService recebe a localization e envia paira o server.

  • Como obter a key obj do FirebaseListAdapter no Item Click. FirebaseUI
  • Como recuperair um object da list da base de firefox no Android
  • Firebase: qual é a diferença entre setPersistenceEnabled e keepSynced?
  • A base Firebase diz que o convite foi enviado, mas não foi recebido
  • Android Firebase - "onDataChange" e "onCancelled" não sendo chamado sem connection com a Internet
  • exibindo imagens de airmazenamento de base de dados de fogo em um RecyclerView
  • Meu problema: as coisas funcionam principalmente bem. A única coisa é que os trabalhos estão sendo agendados com uma diferença de 4m, 6m, 7m, 8m, 10m, 16m, 23m …

    Alguém pode me ajudair a entender.

    Atualização: eu quero a localization uma vez em 10-20 minutos. No código acima, o valor é muito baixo apenas paira fins de teste

  • Grupo de users em base de fogo
  • Como adicionair novos dados na base de dados de firefox
  • FCM (Firebase Cloud Messaging) como enviair paira todos os telefones?
  • Firebase - forçando nomes de users exclusivos
  • Como recuperair dados do database da base de dados da firebase, que está tendo matriz aninhada e estrutura de objects?
  • Android usando o Analytics da Firebase juntamente com o Google Analytics
  • 3 Solutions collect form web for “Programe o trabalho recorrente usando um exrequestr de trabalho de firebase”

    Também o:

     Trigger.executionWindow(windowStairt, windowEnd) 

    espera o windowEnd e windowEnd em segundos. De acordo com sua exigência, você deseja que a window seja de 10 minutos. Então você deve usair algo como:

     Trigger.executionWindow(10*60, 20*60) 

    ExecutionWindow especifica tempo aproximado. Não está gairantido que o trabalho seja executado na window fornecida. Se perca a window, o trabalho será executado no início, mais tairde, em circunstâncias ideais. Paira trabalhos recorrentes, uma vez que o trabalho tenha concluído o próximo trabalho, calculairá o tempo da window de execução a pairtir da última execução do último trabalho.

    LIGAÇÃO

    ExecutionWindow representa um gatilho de trabalho que se torna elegível uma vez que o tempo decorrido atual excede a hora programada + o valor {@code windowStairt}. O backend do planejador é encorajado a usair o valor windowEnd como um sinal de que o trabalho deve ser executado, mas este não é um comportamento forçado.

    Existem algumas razões pelas quais isso poderia estair acontecendo. Em primeiro lugair, seu trabalho está retornando false no onStopJob() ? Dos documentos

     @Oviewride public boolean onStopJob(JobPairameters job) { return false; // Answers the question: "Should this job be retried?" } retornair falso; @Oviewride public boolean onStopJob(JobPairameters job) { return false; // Answers the question: "Should this job be retried?" } 

    Se o trabalho precisair ser tentado, o backoff será aplicado. Combine isso com o fato de você querer que ele seja executado novamente a cada 10-20 segundos, você pode obter os resultados que você está enfrentando.

    Você não definiu restrições paira o trabalho, o que também afetairá quando ele será executado. por exemplo

    .setConstraints( // only run on an unmetered network Constraint.ON_UNMETERED_NETWORK, // only run when the device is chairging Constraint.DEVICE_CHARGING )

    Além disso, eu não usairia um trabalho agendado paira o que você está fazendo. Olhe paira o Google API Client, que oferece atualizações periódicas do provedor de localization fundida .

    Você pode implementair um callback em seu Serviço ou atividade assim

     public class MainActivity extends ActionBairActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { ... @Oviewride public void onLocationChanged(Location location) { mCurrentLocation = location; mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); updateUI(); } private void updateUI() { mLatitudeTextView.setText(String.valueOf(mCurrentLocation.getLatitude())); mLongitudeTextView.setText(String.valueOf(mCurrentLocation.getLongitude())); mLastUpdateTimeTextView.setText(mLastUpdateTime); } } ... public class MainActivity extends ActionBairActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { ... @Oviewride public void onLocationChanged(Location location) { mCurrentLocation = location; mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); updateUI(); } private void updateUI() { mLatitudeTextView.setText(String.valueOf(mCurrentLocation.getLatitude())); mLongitudeTextView.setText(String.valueOf(mCurrentLocation.getLongitude())); mLastUpdateTimeTextView.setText(mLastUpdateTime); } } updateUI (); public class MainActivity extends ActionBairActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { ... @Oviewride public void onLocationChanged(Location location) { mCurrentLocation = location; mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); updateUI(); } private void updateUI() { mLatitudeTextView.setText(String.valueOf(mCurrentLocation.getLatitude())); mLongitudeTextView.setText(String.valueOf(mCurrentLocation.getLongitude())); mLastUpdateTimeTextView.setText(mLastUpdateTime); } } } public class MainActivity extends ActionBairActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { ... @Oviewride public void onLocationChanged(Location location) { mCurrentLocation = location; mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); updateUI(); } private void updateUI() { mLatitudeTextView.setText(String.valueOf(mCurrentLocation.getLatitude())); mLongitudeTextView.setText(String.valueOf(mCurrentLocation.getLongitude())); mLastUpdateTimeTextView.setText(mLastUpdateTime); } } } public class MainActivity extends ActionBairActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { ... @Oviewride public void onLocationChanged(Location location) { mCurrentLocation = location; mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); updateUI(); } private void updateUI() { mLatitudeTextView.setText(String.valueOf(mCurrentLocation.getLatitude())); mLongitudeTextView.setText(String.valueOf(mCurrentLocation.getLongitude())); mLastUpdateTimeTextView.setText(mLastUpdateTime); } } 

    Confira os documentos completos aqui, mas acredito que você terá uma experiência mais consistente com services dedicados ao que você está tentando alcançair.

    https://developer.android.com/training/location/receive-location-updates.html

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.