Android: problème étrange pour arrêter un service
-
27-09-2019 - |
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
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