Вопрос

У меня есть действие, которое запускает такую ​​службу:

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

и чтобы определить, когда служба останавливается, я использую широковещательный приемник:

@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) {}

        }

    }
}

Сначала я попытался убить службу с помощью

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

но это не сработало, поэтому вместо этого я использовал

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

И это сработало!Кто-нибудь может объяснить, в чем разница?

Спасибо

Это было полезно?

Решение

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

В этом случае, service это ComponentName.Следовательно, service.getClass() вернется ComponentName.class.Ваш сервис YoutubeFeedService.class.

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

Казалось бы, проще позвонить:

stopService(new Intent(FeaturedActivity.this, YoutubeFeedService.class);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top