2017-07-05 14 views
0

サービスを停止できません。Andoridサービスをサービス停止する

私には2つのサービスがあります。 Service1はstartService(intent)でService2を開始します。 stopSelf()でservice1を停止します。 その後、私はService2で何かをやって、Service1をやり直してService2をやめます。

だから、彼らは常に再びお互いを開始しています。

サービスの動作は、最初の起動後に異なります。

私はいくつかのログメッセージを書きますが、情報がログcatで何倍になっているか分かります。

また、stopServiceを使用して、他のアクティビティのonStartCommandでアクティビティを停止しようとしました。

public class Service1 extends Service{ 
    private int startId; 

    @Override 
    public void onCreate(){ 
     super.onCreate(); 
    } 

    private void doSomething(){ 
     ... 
     ... 
     Intent intent = new Intent(getApplicationContext(), Service2.class); 
     startService(intent); 
     this.stopSelf(startId); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     this.startId=startId; 

     Intent beaconIntent = new Intent(getApplicationContext(), Service2.class); 
     stopService(beaconIntent); 

     doSomething(); 

     return START_STICKY; 
    } 
} 

サービス2::

サービス1:ここでは

は私のコードの一部です(サービス1のonStartCommandで、私はstopServiceのサービス2を呼び出して)私はworngやってる何

public class Service2 extends Service implements BeaconConsumer, RangeNotifier{ 
    private BeaconManager mBeaconManager; 
    private int startId; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Intent service1 = new Intent(getApplicationContext(), Service1.class); 
     stopService(service1); 

     mBeaconManager = BeaconManager.getInstanceForApplication(this); 
     mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19")); 
     mBeaconManager.bind(this); 

     this.startId = startId; 

     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mBeaconManager.unbind(this); 
    } 

    @Override 
    public void onBeaconServiceConnect() { 
     region = new Region("all-beacons-region", null, null, null); 
     try { 
      mBeaconManager.startRangingBeaconsInRegion(region);   
     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 
     mBeaconManager.addRangeNotifier(this); 
    } 

    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {   
     if(!beacons.isEmpty()){ 
      doSomething... 
      ... 
      ... 
      Intent intent = new Intent(getApplicationContext(), Service1.class); 
      startService(intent); 

      this.stopSelf();     
     } 
    } 

} 

編集:私はaltbeaconライブラリで作業しているとは言及していませんでした。私はそれが影響を与えないと思った。 しかし、私がアプリケーションを起動するときに実行しているサービスを見て、Service2を停止した後は常に2つのaltbeaconサービス(BeaconIntentProcessorとBeaconService)が実行されています。 多分彼らは私のサービスをmutlipy回呼んでいます。私は私が間違って何をしたかだあなたの助けを

おかげ

敬具

+0

「私は何をやっているのですか?」「あなたはあなたのソースを狙っていません – pskink

+0

Service1を起動する条件は何ですか? –

+0

私はいくつかのコードを追加しました。 @Elias Fazel:Service1の条件はどういう意味ですか?私は他のサービスを開始した後、両方のサービスを停止します。したがって、1回のサービスにつき1回だけ実行する必要があります。 – Fabian

答えて

0

問題はサービス自体ではなく、altbeaconライブラリでした。 BeaconManagerは、たとえサービスが破棄されたとしても、ビーコンをバックグラウンドで探していたBeaconManagerを具体的に示しています。 ログには、サービスが複数回実行されているように見えます。

解決策は、バインドを解除するだけでなく、レンジングを停止し、範囲通知機能を削除することでした。

mBeaconManager.stopRangingBeaconsInRegion(region); 
mBeaconManager.removeAllRangeNotifiers(); 
mBeaconManager.unbind(this); 
関連する問題