0

サービスの停止に問題があります。

私のサービスの宣言:

public class MyService extends Service implements LocationListener { .. }

このサービスは、ボタンが押されたときに呼び出されます。

public void startMyService(View view)
{
    ComponentName comp = new ComponentName(getPackageName(), MyService.class.getName());
    ComponentName service = startService(new Intent().setComponent(comp));
}

別の方法(ボタンクリックで起動)では、停止します。

public void stopMyService(View view)
{
    stopService(new Intent(this, MyService.class));
}

残念ながら、動作していません。このサービスは別のサービスに置き換えられているように思えます。さらに、それは累積的です。たとえば、2回目にサービスを開始すると、実行中など2つあります。誰かが私を助けてくれませんか。よろしくお願いします。

更新:Androidマニフェスト(私のサービスのみ):

<service android:name=".MyService" 
        android:enabled="true" 
        android:exported="false"
        android:label="LocationTrackingService" 
        />
4

1 に答える 1

1

BroadcastReceiverをサービス(または静的メソッド-好みに応じて)に追加して、Context.stopService()またはを呼び出すことがstopSelf()できます。たとえば、add ...

public static String STOP_SERVICE = "com.company.SEND_STOP_SERVICE";

private final BroadcastReceiver stopReceiver = new BroadcastReceiver() {
   @Override
   public void onReceive(Context context, Intent intent) {
      if(intent.getAction().equals(STOP_SERVICE)){
          MyService.this.stopSelf();
      }
   }
};

...あなたのサービスに(それが呼ばれると仮定してMyService)。registerReceiver(stopReceiver, STOP_SERVICE);次に、onStartCommand()メソッドとunregisterReceiver(stopReceiver);を呼び出しますonDestroy()。最後に、サービスを停止する必要がある場所からブロードキャストを送信します。

Intent intent=new Intent();
intent.setAction(MyService.STOP_SERVICE);
sendBroadcast(intent);

いくつかのスレッドがある場合は、前にそれらを停止する必要があります(おそらく、スレッドを持っていて、サービスを開始しましたが、スティッキーでしたか?)

于 2013-03-24T20:32:09.650 に答える