質問

そのようなサービスを開始するアクティビティがあります。

    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 aです 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