2011-12-11 12 views
0

私はService私のコードの2つの場所から開始しています。 ServiceonStartCommand()の内側にあり、別のAndroidでこれは1つのサービスを実行するだけの良い、簡単な方法です

startServiceはそれを開始するためになされた場合

は再び私はそれを停止する必要があります。 I以下のコードで

は、このokですか私は何をすべきprivate boolean getFriendListRunning;

を設定しますか?

public class ServiceGetFriendList extends Service{ 

    private final String TAG = "ServiceGetFriendList"; 
    private IBinder mBinder; 
    private boolean failed = false; 

    private boolean getFriendListRunning; 

    @Override 
    public void onCreate() { 

    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     if(getFriendListRunning) 
      return Service.START_STICKY; 

     getFriendListRunning = true; 

     try{ 
      work...... 
      } catch (Exception e) { 

      }finally{ 

      getFriendListRunning = false; 
     } 
    } 
+0

あなたは 'IntentService' HTTPを使用して考えられている場合は、それを起動しない:// developer.android.com/reference/android/app/IntentService.html? IntentServiceはIntentを介して行う作業を受け取るまで '休眠中です'。 2つ以上のインテントを受信すると、インテントをキューに入れ、受信順に1つずつ処理します。すべての仕事を終えたら、もう一度シャットダウンします。 – Squonk

+0

@MisterSquonk私はIntentServiceを知っていて、呼び出しを待ち行列に入れたくありません。 1つのサービスがすでにonStartCommandの内部で実行されている場合は、呼び出しを強制終了します。 – Erik

+1

あなたのコードに間違いはありませんが、アクティビティを試行するたびに条件付きチェックを行う代わりに、このユースケースを避けるために実装を再設計する方が良いでしょう(2つの場所は同じサービスを開始します)。実行時にサービスを開始する。 – yorkw

答えて

0

私はIntentServiceを使用して終了し、それを開始する前に、私はその、すでに実行しているかどうかを確認するためにRunningServiceInfoをチェックして、そのランニング

private boolean isIntentServiceRunning(String serv) { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (serv.equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 
関連する問題