2016-08-09 138 views
2

Da meine App für Android Version 4.x verfügbar sein muss, kann ich mich nicht ausschließlich auf den JobScheduler für Hintergrundaktivitäten verlassen. Der Firebase JobDispatcher ist abwärtskompatibel mit den Versionen, die ich brauche, also habe ich es ein wenig getestet.Verwendet Firebase JobDispatcher den JobScheduler?

Meine Erwartung war, dass seine Verwendung von Google Play-Diensten, wenn auf Android < 5 und die Jobscheduler API, wenn 5+, wie auf this slide aus den Android Akku und Speicheroptimierungen gesehen Vortrag über Google I/O 2016.

Jobs, die ich in meiner eigenen App mit dem JobDispatcher und der Testapp, die mit dem Firebase JobDispatcher geliefert wird, ausführen, funktionieren. Ich sehe keine Aktivität beim Anruf adb shell dumpsys jobscheduler. Wenn ich den JobScheduler direkt benutze, kann ich die Jobs ohne Probleme sehen.

Also ich denke, die Folie, die ich oben verlinkt falsch ist? Kann der JobDispatcher den JobScheduler unter Android 5+ verwenden? Vielleicht mit einem benutzerdefinierten Treiber?

+1

Nun gibt es Hoffnung, dass Google einen JobScheduler-Treiber liefert: https://github.com/firebase/firebase-jobdispatcher-android/issues/32#issuecomment-249266296 – Henning

Antwort

0

ich Konsolenausgabe auf Android 7.1.1 ... nicht zu weniger:

adb shell dumpsys jobscheduler | grep x\ active 

On Vergangenheit SDK Versionen dumpsys jobscheduler wahrscheinlich einfach nicht werfen, was nicht da ist (wie zum SDK-Versionen starten und dann den Befehl ausgibt würde zeigen, seit wann es funktioniert).

Während seit Android 7.0.0 gibt es für die jobscheduler ein neuer Befehl lautet:

adb shell cmd jobscheduler help 

Job scheduler (jobscheduler) commands: 
    help 
    Print this help text. 
    run [-f | --force] [-u | --user USER_ID] PACKAGE JOB_ID 
    Trigger immediate execution of a specific scheduled job. 
    Options: 
     -f or --force: run the job even if technical constraints such as connectivity are not currently met 
     -u or --user: specify which users job is to be run; the default is the primary or system user 

Der Job Scheduler und der Job Dispatcher sind zwei ganz verschiedene Dinge; der Dispatcher bereits ist der Treiber für Abwärtskompatibilität (daher kann man nicht erwarten, dass das OS den Scheduler hat).

Siehe JobSchedulerShellCommand.java oder diese answer könnte es weiter erklären.

Die android-job Bibliothek tut im Allgemeinen auch ganz dasselbe.

+0

Vielen Dank für Ihre Antwort. Mit "Ich sehe keine Aktivität in der Shell" meinte ich für meine App. Ohne einen richtigen JobScheduler Treiber ist der JobDispatcher im Moment ziemlich nutzlos. Ich baue dafür selbst einen rudimentären Scheduler-Treiber, bin aber trotzdem enttäuscht. Es gibt fast keine Aktivitäten auf dem GitHub-Projekt und die versprochene Funktionalität ist [noch ein Jahr später] (https://github.com/firebase/firebase-jobdispatcher-android/issues/32). Im Nachhinein hätte ich die Evernote Android-Job-Bibliothek benutzen sollen. – Henning