2017-11-29 9 views
0

내가는 myService라는 서비스 클래스를 가지고 있고이 서비스 여기Android - 서비스가 실행되는 동안 서비스 간격 시작을 중지하는 방법?

를 실행하는 간격을 사용하는 코드입니다 :

public class myService extends Service { 
    public Runnable mRunnable = null; 
    IBinder mBinder = new LocalBinder(); 

    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 

    public class LocalBinder extends Binder { 
     public myService getServerInstance() { 
      return myService.this; 
     } 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     final Handler mHandler = new Handler(); 
     mRunnable = new Runnable() { 
      @Override 
      public void run() { 
       Log.d("Service jalan", "beneran dah"); 
       DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
       List<Contact> contacts = db.getAllContacts(); 
       for (Contact cn : contacts) 
       { 
        int idsql = cn.getID(); 
        if(String.valueOf(cn.getFlag()).equals("0")){ 
         Log.d("Id", String.valueOf(cn.getID()) + " Flag :" + cn.getFlag()); 
         sending a = new sending(); //communicate to server 
         a.execute(); 
        } 
        else 
        { 
         Log.d("Data kosong", "atau tidak ada flag = 0"); 
        } 
       } 
       mHandler.postDelayed(mRunnable, 30 * 1000); 
      } 
     }; 
     mHandler.postDelayed(mRunnable, 30 * 1000); 
     return super.onStartCommand(intent, flags, startId); 
    } 
} 

문제 :

때 내 여전히 if statement에서 실행중인 서비스 그러나 이미 간격 30 초 동안 반복하면 내 서비스가 다시 시작됩니다

어떻게 피할 수 있습니까?

+0

에로 다시 시작하기 전에 서비스가 진행 중인지 여부를 확인하는 플래그를 사용할 수 있습니까? – flix

답변

0

당신은 제발 다른 생각

boolean isInProgress = false; 
mRunnable = new Runnable() { 
      @Override 
      public void run() { 
       Log.d("Service jalan", "beneran dah"); 
       if(!isInProgress){ 
       isInProgress = true; 
       DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
       List<Contact> contacts = db.getAllContacts(); 
       for (Contact cn : contacts) 
       { 
        int idsql = cn.getID(); 
        if(String.valueOf(cn.getFlag()).equals("0")){ 
         Log.d("Id", String.valueOf(cn.getID()) + " Flag :" + cn.getFlag()); 
         sending a = new sending(); //communicate to server 
         a.execute(); 
        } 
        else 
        { 
         Log.d("Data kosong", "atau tidak ada flag = 0"); 
        } 
        } 
       isInProgress = false; 
       } 
       mHandler.postDelayed(mRunnable, 30 * 1000); 
      } 
+0

나는'isInProgress 항상 true'라는 경고를했습니다. im이 단순화 될 때'if (! isInProgress) {' – flix