Android Exemple de service d'intention


Exemple

Voici un exemple de IntentService qui prétend charger des images en arrière-plan. Tout ce que vous devez faire pour implémenter un IntentService est de fournir un constructeur qui appelle le constructeur super(String) , et vous devez implémenter la onHandleIntent(Intent) .

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
    }
}

Pour lancer IntentService , vous devez lui envoyer une Intent . Vous pouvez le faire à partir d'une Activity , par exemple. Bien sûr, vous n'êtes pas limité à cela. Voici un exemple de la façon dont vous invoqueriez votre nouveau Service partir d'une classe d' Activity .

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

IntentService traite les données de ses Intent manière séquentielle, de sorte que vous pouvez envoyer plusieurs Intent sans vous soucier de savoir si elles entrent en collision. Seule une Intent à la fois est traitée, les autres vont dans une file d'attente. Lorsque tous les travaux sont terminés, IntentService s'arrête automatiquement.