2017-08-30 1 views
5

Comme here décrit la classe habituelle WakefulBroadcastReceiver est obsolète. Donc, maintenant, il n'est pas possible de créer des tâches planifiées comme pour les versions précédentes du SDK. Google dit, je dois utiliserandroid.app.job.JobScheduler au lieu de WakefulBroadcastReceiver utilisation

https://developer.android.com/reference/android/app/job/JobScheduler.html

Mais comment?

Alors, quelle est la solution la plus utile pour les tâches planifiées en arrière-plan de nos jours?

AlarmManager n'est plus utile?

Mon application se réveille plusieurs fois par jour et met à jour les notifications à l'aide d'AlarmManager. Je ne suis pas vraiment sûr de ce que je dois changer. Ce que je dois mettre en œuvre? L'ancienne API et une nouvelle? Ou seulement une solution à jour?

Répondre

4

maintenant ce n'est pas possible de créer une tâche planifiée comme pour les SDK précédent libère

WakefulBroadcastReceiver n'a jamais été la seule option pour cela. Par exemple, mon WakefulIntentService remonte à 2009. Et the JobIntentService ajouté à la bibliothèque de support supplante les deux.

Mais comment?

Um, JobScheduler est couvert de the JavaDocs et elsewhere in the documentation, ainsi que des livres et des cours sur le développement d'applications Android.

Quelle est la solution la plus utile pour les tâches planifiées en arrière-plan de nos jours?

Cela dépend entièrement de la façon dont vous voulez définir "utile", et je ne connais pas votre définition.

D'une manière générale:

  • Utilisez JobScheduler si possible

  • Utilisez setAlarmClock() sur AlarmManager si vous écrivez un réveil application

  • Utilisez les autres set...() méthodes sur AlarmManager pour la compatibilité ascendante pour les appareils pré-Android 5.0, peut-être via une bibliothèque wrapper (par exemple,d'Evernote 0)

  • Utiliser la messagerie push (par exemple, FCM) lorsque cela est possible et si vous êtes en mesure de dépendre de cette solution de messagerie push

est-AlarmManager pas plus utile?

Faire toute sorte de travail de fond périodique « plus utile » est pour certaines définitions de « utile ». Le mode Doze et la veille d'application, introduits dans Android 6.0, rendent fondamentalement le travail de fond périodique peu fiable du point de vue de l'utilisateur.

Ce que je dois implémenter? L'ancienne API et une nouvelle? Ou seulement une solution à jour?

Il est impossible de répondre à cette question dans l'abstrait. Il n'y a rien dans Android 8.0, ou la bibliothèque de support, qui vous empêche d'utiliser AlarmManager comme vous l'avez été.

+0

Je dois utiliser WakefulBroadcastReceiver pour écouter les modifications apportées à AIRPLANE_MODE, puis désactiver certaines fonctionnalités qui s'exécutent en arrière-plan dans certains SDK tiers, même lorsque l'application est en arrière-plan. Je suis confus comment utiliser Jobscheduler pour écouter le changement AIRPLANE_MODE lorsque mon application est en arrière-plan. –

+1

@srv_sud: Cette action de diffusion n'apparaît pas sur la [liste blanche implicite de diffusion] (https://developer.android.com/guide/components/broadcast-exceptions.html), ce qui peut ne pas fonctionner sur Android 8.0+ de toute façon. Au-delà de cela, je vous recommande de poser une question distincte Stack Overflow concernant vos préoccupations. – CommonsWare

+0

@CommonsWare, vraiment, il n'y a pas de tutoriels sur internet "comment utiliser Jobscheduler au lieu de WakefulBroadcastReceiver" pour attraper les notifications push. Un grand nombre d'exemples pour remplacer Service via JobScheduler qui est démarré par wakefulreceiver mais ce n'est pas la même chose. –