0

이것이 주기적으로 중지하는 적절한 방법인지 알고 싶습니다. service. static boolean 변수 isServiceStopped이 내 MainActivity에 있는데, 버튼을 클릭하여 진행중인 service을 시작하거나 중지 할 수 있습니다. 보시다시피 onDestroy() 메서드에서 내 서비스 일정을 AlarmManager으로 변경 했으므로 MainActvity에서 stopService()을 호출하면 서비스가 삭제되지만 다시 일정이 변경되어 아무런 영향도 미치지 않습니다. 이것이 MainActivity에서 설정할 수있는 정적 부울 변수 인 플래그를 사용하는 이유입니다. 버튼을 클릭하여이 플래그를 설정하면 true이 설정되고 서비스가 실행되지 않으므로 다시 스케줄되지 않습니다 onDestroy() 방법.Android - 정기적 인 서비스 중지

이 방법이 효과적이지만, 개인적으로는 서비스를 실행하는 경우 시스템에서 정적 변수를 찾는 방법을 응용 프로그램을 닫으면 어떻게 되겠습니까? 그래서 이것을하는 올바른 방법은 무엇입니까? 일정 조정 부분을 onStartCommand()에 넣어야합니까?

감사합니다.

public class AsyService extends Service { 

     @Override 
     public IBinder onBind(Intent i) {  
      return null; 
     } 

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

     @Override 
     public void onStart(Intent intent, int startId) { 
      super.onStart(intent, startId); 
     } 

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 
      return START_NOT_STICKY; 
     } 


     @Override 
     public void onDestroy() { 
      //Right now I have a static variable defined in MainActivity to set the boolean isServiceStopped 
      if (!MainActivity.isServiceStopped){ 
       AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE); 
       alarm.set(
        AlarmManager.RTC_WAKEUP, 
        System.currentTimeMillis() + (1000 * 15), 
        PendingIntent.getService(this, 0, new Intent(this, AsyService.class), 0) 
       ); 
      } 

     } 

    } 

MainAcvitiy :

btn2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 1, new Intent(MainActivity.this, AsyService.class), PendingIntent.FLAG_UPDATE_CURRENT); 
      AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE); 
      alarm.cancel(pendingIntent); 

     } 
    }); 

답변

0

올바른 접근 방식은, 원래의 대기 의도를 다시 취소하고 알람 관리자에서 서비스를 제거하는 것입니다. 나는 왜 당신이 그 자체 내에서 서비스를 종료시키고 싶어하는지 알지 못한다.

PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(pendingIntent); 
+0

편집 된 코드를 확인하십시오. 서비스를 중지하려는 버튼으로 게시물을 업데이트했습니다. 그러나 그것은 그것을 멈추지 않습니다. –

+0

내 재 예약 방법이 onDestroy()에 있습니까? –

+0

@JaniBela : 안녕하세요 ... 늦게 답변 해 주셔서 죄송합니다. ** 예 ** ** 일정 계획 방법을'onDestroy()'에 넣고 * NOT *'onPause()'에 넣어 두는 것은 절대적으로 옳습니다. 또는 다른 곳에서는 ... '활동'이 파괴되면 서비스가 올바르게 설정됩니다. –