이것이 주기적으로 중지하는 적절한 방법인지 알고 싶습니다. 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);
}
});
편집 된 코드를 확인하십시오. 서비스를 중지하려는 버튼으로 게시물을 업데이트했습니다. 그러나 그것은 그것을 멈추지 않습니다. –
내 재 예약 방법이 onDestroy()에 있습니까? –
@JaniBela : 안녕하세요 ... 늦게 답변 해 주셔서 죄송합니다. ** 예 ** ** 일정 계획 방법을'onDestroy()'에 넣고 * NOT *'onPause()'에 넣어 두는 것은 절대적으로 옳습니다. 또는 다른 곳에서는 ... '활동'이 파괴되면 서비스가 올바르게 설정됩니다. –