Kann mir jemand helfen, Android Service oder IntentService korrekt zu verwenden? Die Dokumentation scheint sich hier zu widersprechen:So verwenden Sie Android Service oder ServiceIntent
Caution: A service runs in the same process as the application in which it is
declared and in the main thread of that application by default. If your service
performs intensive or blocking operations while the user interacts with an
activity from the same application, the service slows down activity performance.
To avoid impacting application performance, start a new thread inside the service.
und hier
public class HelloIntentService extends IntentService {
/**
* A constructor is required, and must call the super IntentService(String)
* constructor with a name for the worker thread.
*/
public HelloIntentService() {
super("HelloIntentService");
}
/**
* The IntentService calls this method from the default worker thread with
* the intent that started the service. When this method returns, IntentService
* stops the service, as appropriate.
*/
@Override
protected void onHandleIntent(Intent intent) {
// Normally we would do some work here, like download a file.
// For our sample, we just sleep for 5 seconds.
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// Restore interrupt status.
Thread.currentThread().interrupt();
}
}
}
der ganze Zweck des Dienstes gegeben oder ServiceIntent ist lang laufenden Aufträge im Hintergrund laufen zu lassen, ohne die Benutzeroberfläche zu beeinflussen, warum dann funktioniert das Beispielcode tut genau das, was die Vorsicht angezeigt hat, was Sie nicht tun sollten - und ich nehme an, dass ein Aufruf von Thread.sleep() den Hauptthread blockiert.
Bin ich im folgenden Verständnis korrigieren:
- Der Service selbst läuft noch auf dem Hauptanwendungsthread hat aber keine UI-Komponente (Aktivität) und läuft weiter, auch wenn die Anwendung nicht vom Benutzer verwendet wird, eine Aktivität, anders als die nicht
- Jede lange laufende Arbeit Hintergrund muss noch einen separaten Thread erstellen die Hauptanwendung zu vermeiden Gewinde blockiert
- AsyncTask mit einer Aktivität verknüpft ist vermutlich bei dem der Stop wird läuft, wenn die Anwendung nicht mehr läuft r die aktive Anwendung (d.h. wenn der Benutzer zu einer anderen Anwendung wechselt), würde man Service oder ServiceIntent verwenden, wenn die Aufgabe weiter ausgeführt werden soll.
- IntentService führt die Aufgabe in einem separaten Thread zum Hauptthread aus, so dass Sie sich keine Sorgen darüber machen müssen, den Hauptthread mit langen Aufgaben zu blockieren oder Thread.sleep() aufzurufen.
Habe ich etwas mit der Beschreibung von Android-Service oder ServiceIntents falsch verstanden?
Awesome - danke, was ich Bestätigung benötigt - Sie sollten helfen, die Dokumentation zu schreiben. –
@DuncanGrenewald: Entschuldigung. Du musst dich mit [einem Buch] begnügen (https://commonsware.com/Android). :-) – CommonsWare