2016-09-15 3 views
0

내 앱에서 나는 AlarmManager을 사용하여 매주 특정 시간에 서비스를 시작합니다. 그러나 어떤 경우에는 다른 7 일을 기다리지 않고 다음날 서비스를 요청해야합니다. 그렇기 때문에 나는 알람을 재 설정하지 않고 시작된 서비스에서 새로운 알람을 생성하고 특정 날짜로 설정합니다. 다음과 같은 것 :AlarmManager가 시작한 서비스에서 새 알람 시작

public class AlarmService extends Service { 
@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    //do something 

    //setting new alarm 
    AlarmManager alarmMng = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(this,AlarmService.class); 
    PendingIntent alarmIntent = PendingIntent.getService(this, 0, i, 0); 
    Calendar c = Calendar.getInstance(); 
    if(something) alarmMng.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis()+1000*60*60*24,alarmIntent); 
    else alarmMng.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis()+1000*60*60*24*7,alarmIntent); 
    return START_STICKY; 
} 

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

모든 것이 잘 작동하지만 이것이 좋은 방법인지 궁금합니다. 방금 호출 한 서비스에서 새 알람을 만드는 것이 좋은 생각입니까? 나쁜 프로그래밍 연습으로 간주됩니까? 그렇다면 어떻게 처리해야합니까?

답변

2

나쁜 프로그래밍 연습으로 간주됩니까?

아니요 - 이것은 경보 이벤트를 생성하는 훌륭한 사용 사례입니다. 설명서를 보면 AlarmManager을 사용하면 실행 중이 아닌 응용 프로그램에 이벤트를 보낼 수 있습니다. Service에있는 이벤트를 수신하면 다른 알람 이벤트를 예약합니다. 그냥 하나라는 것이었다 서비스에서 새로운 알람을 만드는 것이 좋습니다

가 : 내 대답의 나머지는 당신에게 다른 질문에 대답하는 방법을 설명하기위한 것입니다?

Service이 정말로 필요한지를 결정하려면 알람을 설정하는 것 이상으로 코드의 "무언가"부분에 의존하십시오. 예를 들어 IntentService 또는 BroadcastReceiver을 사용해도 괜찮을 수 있습니다.

편집 : 즉,이 문제를 처리하려면 백그라운드 프로세스가 필요합니다. 적절한 백그라운드 프로세스 (Receiver 또는 Service)를 결정하는 것은 처리가 얼마나 필요한지에 달려 있습니다. 일반적으로 알람을 모두 설정하는 것은 Receiver에서 처리 할 수 ​​있지만 처리하는 데 너무 오래 걸리면 (예 : 10 초 이상) ANR (Application Not Responding) 충돌이 발생합니다. 그 때 당신은 서비스가 필요합니다. 이 서비스에 대한 좋은 게시물입니다

최종 편집

.. : 서비스가 여러 번 호출되는 경우 Service vs IntentService

특히, 당신이해야 관심사는 당신은 아마 이전을 취소하는 코드를 포함해야한다 새 알람을 설정하기 전에 알람이 생성됩니다.

EDIT : 매번 새로운 서비스를 만들거나 새 알람을 보내지 않습니다. 서비스에는 의도가 전송 될 때마다 (AlarmManager 또는 다른 방법을 통해) 호출되는 onStartCommand이 있습니다. 새 인스턴스가 아직 인스턴스화되지 않은 경우 생성되지 않습니다.

+0

글쎄 "할 일"이 대부분 알림을 표시합니다. – matip

+0

내 답변을 편집했습니다. 희망이 도움이됩니다. – Jim

+0

그는 알람 자체로 서비스 일정을 잡으려고했다. 이 알람은 알람 자체가 서비스 내에서 초기화되는 서비스를 시작합니다. –

관련 문제