Why is this better than background services and listening for system broadcasts?
Running apps in the background is expensive, which is especially harmful when they're not actively doing work that's important to the user. That problem is multiplied when those background services are listening for frequently sent broadcasts (android.net.conn.CONNECTIVITY_CHANGE and android.hardware.action.NEW_PICTURE are common examples). Even worse, there's no way of specifying prerequisites for these broadcasts. Listening for CONNECTIVITY_CHANGE broadcasts does not guarantee that the device has an active network connection, only that the connection was recently changed.
In recognition of these issues, the Android framework team created the
JobScheduler. This provides developers a simple way of specifying runtime constraints on their jobs. Available constraints include
network type,
charging state, and
idle state.
This library uses the scheduling engine inside
Google Play services(formerly the
GCM Network Manager component) to provide a backwards compatible (back to Gingerbread)
JobScheduler-like API.
This I/O presentation has more information on why background services can be harmful and what you can do about them: