Suche…


Syntax

  1. <service android: name = ". UploadS3IntentService" android: exported = "false" />

Bemerkungen

Ein IntentService bietet eine einfache Möglichkeit, die Arbeit in einem Hintergrundthread IntentService . Es erledigt alles für Sie, wenn Sie Anfragen empfangen, in eine Warteschlange stellen, sich selbst stoppen usw. Es ist auch einfach zu implementieren und daher ideal für zeitaufwendige Vorgänge, die nicht zum Main (UI) -Thread gehören.

Einen IntentService erstellen

Erstellen Sie zum Erstellen eines IntentService eine Klasse, die IntentService , und darin eine Methode, die onHandleIntent überschreibt:

package com.example.myapp;
public class MyIntentService extends IntentService {
    @Override
     protected void onHandleIntent (Intent workIntent) {
         //Do something in the background, based on the contents of workIntent.
     }
}

Beispielabsichts-Service

Hier ist ein Beispiel für einen IntentService , der vorgibt, Bilder im Hintergrund zu laden. Zur Implementierung eines IntentService müssen Sie IntentService einen Konstruktor bereitstellen, der den super(String) onHandleIntent(Intent) , und Sie müssen die onHandleIntent(Intent) -Methode implementieren.

public class ImageLoaderIntentService extends IntentService {

    public static final String IMAGE_URL = "url";

    /**
     * Define a constructor and call the super(String) constructor, in order to name the worker
     * thread - this is important if you want to debug and know the name of the thread upon 
     * which this Service is operating its jobs.
     */
    public ImageLoaderIntentService() {
        super("Example");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // This is where you do all your logic - this code is executed on a background thread

        String imageUrl = intent.getStringExtra(IMAGE_URL);

        if (!TextUtils.isEmpty(imageUrl)) {
            Drawable image = HttpUtils.loadImage(imageUrl); // HttpUtils is made-up for the example
        }

        // Send your drawable back to the UI now, so that you can use it - there are many ways
        // to achieve this, but they are out of reach for this example
    }
}

Um einen IntentService zu starten, müssen Sie ihm eine Intent senden. Sie können dies beispielsweise aus einer Activity tun. Natürlich sind Sie nicht darauf beschränkt. Hier ein Beispiel, wie Sie Ihren neuen Service aus einer Activity abrufen würden.

Intent serviceIntent = new Intent(this, ImageLoaderIntentService.class); // you can use 'this' as the first parameter if your class is a Context (i.e. an Activity, another Service, etc.), otherwise, supply the context differently
serviceIntent.putExtra(IMAGE_URL, "http://www.example-site.org/some/path/to/an/image");
startService(serviceIntent); // if you are not using 'this' in the first line, you also have to put the call to the Context object before startService(Intent) here

Die IntentService verarbeitet die Daten von seiner Intent s sequentiell, so dass Sie mehrere senden Intent s , ohne sich Gedanken , ob sie miteinander kollidieren. Es wird jeweils nur eine Intent verarbeitet, der Rest wird in eine Warteschlange gestellt. Wenn alle Jobs abgeschlossen sind, wird der IntentService automatisch heruntergefahren.

Grundlegendes IntentService-Beispiel

Die abstrakte Klasse IntentService ist eine Basisklasse für Dienste, die im Hintergrund ohne Benutzeroberfläche ausgeführt werden. Um die Benutzeroberfläche zu aktualisieren, müssen wir daher einen Empfänger verwenden, der entweder ein BroadcastReceiver oder ein ResultReceiver :

  • Ein BroadcastReceiver sollte verwendet werden, wenn Ihr Dienst mit mehreren Komponenten kommunizieren muss, die auf Kommunikation warten möchten.
  • Ein ResultReceiver : sollte verwendet werden, wenn Ihr Dienst nur mit der übergeordneten Anwendung (dh Ihrer Anwendung) kommunizieren muss.

Innerhalb des IntentService haben wir eine Schlüsselmethode, onHandleIntent() , in der wir alle Aktionen ausführen, z.

Wenn Sie IntentService eigenen IntentService verwenden IntentService , müssen Sie ihn wie folgt erweitern:

public class YourIntentService extends IntentService {
    public YourIntentService () {
        super("YourIntentService ");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO: Write your own code here.
    }
}    

Das Aufrufen / Starten der Aktivität kann wie folgt durchgeführt werden:

Intent i = new Intent(this, YourIntentService.class);
startService(i);  // For the service.
startActivity(i); // For the activity; ignore this for now.

Ähnlich wie bei jeder Aktivität können Sie zusätzliche Informationen wie Bündeldaten wie folgt übergeben:

Intent passDataIntent = new Intent(this, YourIntentService.class);
msgIntent.putExtra("foo","bar");
startService(passDataIntent);

YourIntentService jetzt an, dass wir einige Daten an die YourIntentService Klasse übergeben haben. Basierend auf diesen Daten kann eine Aktion wie folgt ausgeführt werden:

public class YourIntentService extends IntentService {
    private String actvityValue="bar";
    String retrivedValue=intent.getStringExtra("foo");

    public YourIntentService () {
        super("YourIntentService ");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if(retrivedValue.equals(actvityValue)){
            // Send the notification to foo.
        } else {
            // Retrieving data failed.
        }    
    }
}

Der obige Code zeigt auch, wie mit Einschränkungen in der OnHandleIntent() Methode OnHandleIntent() wird.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow