2010-10-30 10 views
0

J'ai une activité qui démarre un service comme ça:Android: problème étrange pour arrêter un service

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

et de détecter lorsque le service cesse-je utiliser 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) {} 

     } 

    } 
} 

I d'abord tenté de tuer le service avec

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

mais cela ne fonctionne pas, donc au lieu que j'ai utilisé

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

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

Merci

Répondre

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

Dans ce cas, service est un ComponentName. Par conséquent, service.getClass() renverra ComponentName.class. Votre service est le 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);