Question

J'ai une activité qui démarre un service comme ça:

    Intent youtubeIntent = new Intent(this, YoutubeFeedService.class);
    service = startService(youtubeIntent);

et pour détecter lorsque le service arrête J'utilise un récepteur de diffusion:

@Override
public void onResume() {
    IntentFilter filter; 
    filter = new IntentFilter(YoutubeFeedService.NEW_VIDEO_CELL); 
    receiver = new FeaturedReceiver(); 
    registerReceiver(receiver, filter);
    super.onResume();
}

@Override public void onPause() {
    unregisterReceiver(receiver); 
    super.onPause();
}



public class FeaturedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String title = intent.getStringExtra("title");


        if (title.equals("-1") || title.equals("1")){
            //stopService(new Intent(FeaturedActivity.this, service.getClass()));
            try {
                Class serviceClass = Class.forName(service.getClassName());
                stopService(new Intent(FeaturedActivity.this, serviceClass));
            } 
            catch (ClassNotFoundException e) {}

        }

    }
}

J'ai d'abord essayé de tuer le service avec

stopService(new Intent(FeaturedActivity.this, service.getClass()));

mais cela n'a pas marché, donc au lieu je

try {
                Class serviceClass = Class.forName(service.getClassName());
                stopService(new Intent(FeaturedActivity.this, serviceClass));
            } 
            catch (ClassNotFoundException e) {}

Et cela a fonctionné! Quelqu'un peut-il expliquer quelle est la différence?

Merci

Était-ce utile?

La solution

stopService(new Intent(FeaturedActivity.this, service.getClass()));

Dans ce cas, service est un ComponentName. Par conséquent, service.getClass() retournera ComponentName.class. Votre service est YoutubeFeedService.class.

Class serviceClass = Class.forName(service.getClassName());
stopService(new Intent(FeaturedActivity.this, serviceClass));

Il semblerait plus simple d'appeler:

stopService(new Intent(FeaturedActivity.this, YoutubeFeedService.class);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top