안녕하세요.
제가 이번에 서비스와 알람매니저를 이용한 어플리케이션을 개발중입니다.
그런데 알람 매니저가 지정된 인터벌에 무관하게 지속적으로 실행되는거 같습니다..
우선 코드 첨부해 보겠습니다.
package com.example.alimee;
import java.util.Calendar;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import com.example.alimee.data.SystemWakeUp;
public class UpdateService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
SystemWakeUp.acquireCpuWakeLock(this);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("myApp", "destroy...");
SystemWakeUp.releaseCpuLock();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
startUpdate();
return START_REDELIVER_INTENT;
}
public void setAlarm() {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
Calendar cal = Calendar.getInstance();
//cal.add(Calendar.SECOND, 5);
cal.set(Calendar.HOUR_OF_DAY, 17);
cal.set(Calendar.MINUTE, 10);
cal.set(Calendar.SECOND, 0);
long interval = 24*60*60*1000; // 24시간
//long interval = 10*1000;
Intent intent = new Intent(this, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), interval, pendingIntent);
Log.d("myApp", "start alarm");
// 체크 해제 시 알람과 서비스 모두 종료
if(!pref.getBoolean("check", false)) {
am.cancel(pendingIntent);
stopSelf();
}
}
public void startUpdate() {
setAlarm();
function f = new function();
f.a(); // Log.d("myApp", "aaa");
f.b(); // Log.d("myApp", "bbb");
f.c(); // Log.d("myApp", "ccc");
}
}
코드는 위와 같습니다.
로그를 쭉 확인해 본 결과
지속적으로
start alarm
aaa
bbb
ccc
가 인터벌과 무관하게 무한루프를 돌 듯 찍힙니다;;
그리고 이 상태에서는 알람이나 서비스가 종료가 되지 않습니다.. ㅠ_ ㅠ;;
지정된 시간에 시작되서 인터벌 간격으로 한번씩만 로그가 찍히게 하고 싶은데..
어디에 문제가 있는지
어떻게 고쳐야 하는지 선배님들의 조언과 답변 부탁드리겠습니다...