Ich habe einige Artikel gelesen und beide scheinen dasselbe zu tun. Ich habe mich gefragt, was der Unterschied zwischen dem Starten des Dienstes ist:
Intent intent = new Intent(this, HelloService.class);
startService(intent);
oder so:
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);
Während ich durchlese, machen diese beiden dasselbe, wenn Sie im Dienst einen Parameter START_STICKY zurückgeben;
android
android-service
user3629316
quelle
quelle
Antworten:
Absicht
Eine Android-Absicht ist ein Objekt, das eine Absicht trägt, dh eine Nachricht von einer Komponente zu einer anderen Komponente, entweder innerhalb oder außerhalb der Anwendung. Absichten können Nachrichten zwischen einer der drei Kernkomponenten einer Anwendung kommunizieren - Aktivitäten, Dienste und BroadcastReceiver.
Die Absicht selbst, ein Absichtsobjekt, ist eine passive Datenstruktur. Es enthält eine abstrakte Beschreibung einer auszuführenden Operation.
Beispiel: Angenommen, Sie haben eine Aktivität, mit der ein E-Mail-Client gestartet und eine E-Mail gesendet werden muss. Zu diesem Zweck sendet Ihre Aktivität eine Absicht mit der Aktion
ACTION_SEND
zusammen mit der entsprechenden Auswahl an den Android Intent Resolver:Die angegebene Auswahl bietet dem Benutzer die richtige Oberfläche, um auszuwählen, wie Ihre E-Mail-Daten gesendet werden sollen.
EXPLICIT INTENTS
IMPLICIT INTENTS
Ausstehende Absicht
Ein PendingIntent ist ein Token, das Sie einer fremden Anwendung (z. B. NotificationManager, AlarmManager, AppWidgetManager auf dem Startbildschirm oder anderen Anwendungen von Drittanbietern) geben, mit dem die fremde Anwendung die Berechtigungen Ihrer Anwendung zum Ausführen eines vordefinierten Codeteils verwenden kann.
Beispiel für ausstehende Absichten: http://android-pending-intent.blogspot.in/
Quelle: Android Intents und Android Pending Intents
Hoffe das hilft.
quelle
PendingIntent
ist ein Wrapper vonIntent
. Die fremde App, die die empfängtPendingIntent
, weiß nicht, vonIntent
welchem Inhalt sie verpackt wirdPendingIntent
. Die Mission der ausländischen App besteht darin, die Absicht an den Eigentümer zurückzusenden, wenn bestimmte Bedingungen erfüllt sind (z. B. Alarm mit Zeitplan oder Benachrichtigung mit Klick ...). Die Bedingungen werden vom Eigentümer angegeben, aber von einer ausländischen App verarbeitet (z. B. Alarm, Benachrichtigung).Wenn eine ausländische App eine Absicht an Ihre App gesendet hat, bedeutet dies, dass eine ausländische App über den Inhalt der Absicht informiert ist. Wenn eine ausländische App die Entscheidung trifft, eine Absicht zu senden, muss Ihre App die Absicht verarbeiten, um bestimmte Bedingungen zu erfüllen => Ihre App erhält die Leistungsressource des Systems.
quelle
Ein weiterer einfacher Unterschied:
Die normale Absicht stirbt, sobald die App beendet wird.
Ausstehende Absichten sterben nie. Sie sind so lange am Leben, wie sie vom Alarmdienst, vom Ortungsdienst oder von anderen Diensten benötigt werden.
quelle
Starten Sie Dienste regelmäßig über AlarmManager
Wie bei Aktivitäten kann das Android-System den Prozess eines Dienstes jederzeit beenden, um Ressourcen zu sparen. Aus diesem Grund können Sie a nicht einfach
TimerTask
im Service verwenden, um sicherzustellen, dass es regelmäßig ausgeführt wird.Verwenden Sie für die korrekte Planung des Dienstes die
AlarmManager
Klasse.AKTUALISIEREN:
Es gibt also keinen tatsächlichen Unterschied zwischen den beiden. Abhängig davon, ob Sie die Ausführung des Dienstes sicherstellen möchten oder nicht, können Sie entscheiden, was verwendet werden soll, da für den ersteren keine Garantie besteht und für den späteren .
Weitere Infos unter AndroidServices .
quelle
getApplicationContext()
oder verwenden Sie es im Kontextzweck niemals , wenn Sie es unbedingt möchten. Lesen Sie einfach - wann Sie den Aktivitätskontext oder den Anwendungskontext aufrufen sollen ( stackoverflow.com/questions/7298731/… ).Funktionell gibt es keinen Unterschied.
Die Bedeutung von PendingIntent ist, dass Sie es mit einer anderen Anwendung verarbeiten können, die es später verwenden kann, als ob die andere Anwendung Sie selbst wäre. Hier ist die relevante Erklärung aus der Dokumentation :
PendingIntent ist also nur ein Verweis auf die Daten, die den ursprünglichen Intent darstellen (der zum Erstellen des PendingIntent verwendet wurde).
quelle