android


Back-off for a fixed period with JobScheduler


What I am trying to achieve is:
Three (may increase) JobServices are scheduled.
Each job keeps invoking on a difference set of RESTful APIs from a service until it decides to end.
The service API has an hourly quota limitation, and will return a certain code when invoked too frequently.
The quota is calculated for each application, meaning invocations by all three jobs are counted as a whole.
When a job receives the error code indicating the quota is exceeded, it stops running and wait for re-schedule.
Since the quota is hourly basis, the job only needs to wait for 60 minutes for the cool-down.
To test the back-off strategy, I had an experiment building the job like this:
new JobInfo.Builder(JOB_ID, new ComponentName(this, QuickJob.class))
.setOverrideDeadline(ONE_MINUTE)
.setMinimumLatency(HALF_MINUTE)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.build();
Basicly what the QuickJob does is it logs the timestamp, calls jobFinished(params, true) and waits for Android to reschedule.
From the logs I could see that the first time the job stopped for approximately 1 minute, second time 2 minutes, then it's 4 minutes, 8, ..., which fits the description of the BACKOFF_POLICY_LINEAR policy.
However, in my case, as described in the beginning, I only need the job to back-off for an hour, not 1, 2, 4, 8 hours.
I thought about triggering the jobs at the start of every hour with AlarmManager, but I think it's nice to have the network type settings over the jobs.
Another possible solution I thought about is to have the jobs call jobFinished() with needsReschedule being false, but schedule themselves to run again in the next hour. But this just feels hacky and not... right.
So what are my choices now?

Related Links

RecyclerView.ViewHolder unable to bind view with ButterKnife
Duplicates in the dependencies block of jar files
No permission to access this object error
Play audio from video in background
Android, cannot resolve method getMap()
Use the HttpURLConnection Response Cache
how to make live streaming video from mobile to a page on website
App not Responding due to transition
Image Resize Event?
Android: Preference class which fills a list of folders for the user to choose from
Android RatingBar gradient drawable
remove duplicate item arraylist android
sh -f and -d are being treated as -e
Android HTTP Basic Authentication not adding on server
Contacts UPPERCASE followed by lowercase
Glide doesn't want to load images with correct size

Categories

HOME
phpword
linkedin
merge
css3
redux-form
solver
shiro
grafana
alarm
static-site
polling
computer-science
mel
github-enterprise
android-intent
alpacajs
easyphp
wolframalpha
nodemcu
sar
googlebot
user-experience
poedit
href
displaytag
tiki-wiki
syntax-highlighting
oculus
sqsh
testbed
classcastexception
fiware-cygnus
apiary.io
sim-toolkit
watchman
nohup
jvmti
comparison-operators
visa
branching-and-merging
wmp
parser-generator
microsoft-metro
importerror
optimizely
x++
colorbar
opengl-4
ngmaterial
jqchart
lsyncd
tinkerpop3
x-tag
embedding
android-wake-lock
kiosk
sklearn-pandas
uiactionsheet
realsense
dynatree
ansi
teamcity-9.1
user-permissions
code-documentation
execve
packet-sniffers
psr-4
reflector
extjs2
decoupling
menubar
gae-quotas
time.h
abstract-data-type
cardreader
automationelement
google-ajax-api
lr
tmx
twitterizer
load-time
build-environment
sifr3

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App