Schedule recurring job using firebase job dispatcher

前端 未结 3 1399
慢半拍i
慢半拍i 2021-02-19 19:48

I am trying to post the location of the android device to server every 10 minutes. I am using firebase job dispatcher to do this

FirebaseJobDispatcher dispatche         


        
3条回答
  •  灰色年华
    2021-02-19 20:45

    There are a few reasons why this could be happening. Firstly is your job returning false in onStopJob()? From the docs

    @Override
    public boolean onStopJob(JobParameters job) {
        return false; // Answers the question: "Should this job be retried?"
    }
    

    If the job needs be retried then the backoff will be applied. Combine this with the fact you want it to run again every 10-20 seconds you might get the results you are experiencing.

    You have not set any constraints for the job, which also will affect when it will run. e.g.

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

    Furthermore, I would not use a scheduled job for what you are doing. Look at the Google API Client which offers periodic updates from the fused location provider.

    You can implement a callback on your Service or Activity like so

    public class MainActivity extends ActionBarActivity implements
            ConnectionCallbacks, OnConnectionFailedListener, LocationListener {
        ...
        @Override
        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);
        }
    }
    

    Checkout the full docs here but I believe you will have a more consistent experience with services dedicated to what you are trying to achieve.

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

提交回复
热议问题