J'ai lu quelques articles et les deux semblent faire la même chose et je me demandais quelle est la différence entre démarrer le service comme ça:
Intent intent = new Intent(this, HelloService.class);
startService(intent);
ou comme ça:
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
Au fur et à mesure que je lis, ces deux font la même chose, si dans le service vous retournez un paramètre START_STICKY;
android
android-service
user3629316
la source
la source
Réponses:
Intention
Une intention Android est un objet portant une intention, c'est-à-dire un message d'un composant à un autre composant à l'intérieur ou à l'extérieur de l'application. Les intentions peuvent communiquer des messages entre l'un des trois composants principaux d'une application: activités, services et récepteurs de diffusion.
L'intention elle-même, un objet Intent, est une structure de données passive. Il contient une description abstraite d'une opération à effectuer.
Par exemple: disons que vous avez une activité qui doit lancer un client de messagerie et envoyer un e-mail. Pour ce faire, votre activité enverrait une intention avec l'action
ACTION_SEND
, ainsi que le sélecteur approprié, au résolveur d'intention Android:Le sélecteur spécifié donne l'interface appropriée pour que l'utilisateur choisisse comment envoyer vos données de courrier électronique.
DES INVENTIONS EXPLICITES
DES INTENTION IMPLICITES
En attente d'intention
Un PendingIntent est un jeton que vous donnez à une application étrangère (par exemple NotificationManager, AlarmManager, Écran d'accueil AppWidgetManager ou d'autres applications tierces), qui permet à l'application étrangère d'utiliser les autorisations de votre application pour exécuter un morceau de code prédéfini.
Exemple d'intention en attente: http://android-pending-intent.blogspot.in/
Source: intentions Android et intentions en attente Android
J'espère que cela t'aides.
la source
PendingIntent
est un wrapper deIntent
. L'application étrangère qui reçoit lePendingIntent
, ne sait pas dont le contenuIntent
est enveloppéPendingIntent
. La mission de l'application étrangère est de renvoyer l'intention au propriétaire lorsque certaines conditions sont remplies (Par exemple: alarme avec horaire, ou notification avec clic ...). Les conditions sont données par le propriétaire mais traitées par une application étrangère (par exemple: alarme, notification).Si une application étrangère a envoyé une intention à votre application, cela signifie que l'application étrangère connaît le contenu de l'intention. et l'application étrangère décide d'envoyer l'intention, puis votre application doit traiter l'intention pour répondre à certaines conditions => votre application obtient la ressource de performance du système.
la source
Une autre différence simple:
L'intention normale mourra dès que l'application sera supprimée.
Les intentions en suspens ne meurent jamais. Ils seront en vie aussi longtemps que nécessaire par le service d'alarme, le service de localisation ou tout autre service.
la source
Démarrage régulier des services via AlarmManager
Comme pour les activités, le système Android peut interrompre le processus d'un service à tout moment pour économiser des ressources. Pour cette raison, vous ne pouvez pas simplement utiliser un
TimerTask
dans le service pour vous assurer qu'il est exécuté régulièrement.Donc, pour une planification correcte du service, utilisez la
AlarmManager
classe.METTRE À JOUR:
Il n'y a donc aucune différence réelle entre les deux. Mais selon que vous souhaitez assurer ou non l'exécution du service, vous pouvez décider quoi utiliser car pour le premier il n'y a aucune garantie et pour le plus tard .
Plus d'informations sur AndroidServices .
la source
getApplicationContext()
ou ne l'utilisez jamais quand vous le voulez strictement, lisez simplement - quand-appeler-activité-contexte-ou-application-contexte ( stackoverflow.com/questions/7298731/… ).Fonctionnellement, il n'y a pas de différence.
La signification de PendingIntent est que vous pouvez le gérer avec une autre application qui pourra l'utiliser ultérieurement comme si l'autre application était vous-même. Voici l'explication pertinente de la documentation :
Donc PendingIntent est juste une référence aux données qui représentent l'intention d'origine (celle utilisée pour créer PendingIntent).
la source