0

Android가 처음이므로 다음 솔루션이 올바른지 확인하고 싶습니다.Android에서 예약 작업 수행

문제 : webservice를 통해 장치의 로컬 데이터베이스를 내 서버의 데이터베이스와 10 분마다 동기화하려고합니다. 이미 새로운/업데이트 된 레코드를 반환 할 수있는 웹 서비스 호출이 있습니다. 내가 궁금해하는 것은이 작업을 예약하는 가장 좋은 방법입니다. 응용 프로그램이 실행되고 있지 않을 때에도 데이터베이스를 동기화하고 싶습니다.

내 솔루션 (이 가야 할 올바른 길인가?) : 나는 MyReceiver에 메시지를 보내는 알람 관리기를 작성합니다 onReceive 그것의에 내가 (경유, android.intent.action.BOOT_COMPLETED을 수신 한 브로드 캐스트 리시버를해야합니다 PendingIntent)를 10 분마다 실행합니다. 또한, 내 응용 프로그램의 시작에서 동일한 작업을 수행합니다 (PendingIntent를 통해 MyReceiver에 메시지를 보내려면 경보를 생성하십시오). 두 경보가 모두 MyReceiver에 메시지를 보내고 해당 PendingIntents가 PendingIntent.FLAG_UPDATE_CURRENT로 초기화되므로 새 경보가 오래된 것? (이것은 내가 무엇을하고 싶은지, 어떤 이유로 장치 부팅 후에 알람이 취소되면 응용 프로그램이 시작될 때 다시 시작해야합니다).

MyReceiver의 onReceive()에서 MyIntentService를 만듭니다 (이 인스턴스는 웹 서비스 호출을 만들고 로컬 데이터베이스를 업데이트합니다).

좋은 해결책입니까? 어떤 제안? 가있는 경우는 그 방식으로 FLAG_UPDATE_CURRENT를 사용

감사

답변

1

는 기존 PendingIntent 우선합니다. 나는 긍정적이지는 않지만 onReceive에 들어가 자마자 PendingIntent가 소비되므로 더 이상 재정의 할 수 없다고 생각합니다. 어느 경우이든, 당신이 찾고있는 기능인 것처럼 들리 겠지만 그렇습니다. 이런 종류의 문제를 해결하는 좋은 방법입니다. 내 유일한 다른 제안은 10 분 간격 타이밍이 절대적으로 중요하지 않으면 AlarmManager에서 INTERVAL_ 일정 (예 : INTERVAL_FIFTEEN_MINUTES) 중 하나를 사용하여 배터리 수명을 절약하는 것입니다. 기본적으로 간격을두고 실행되는 모든 앱이 함께 작업을 일괄 처리하고 기기의 빈도를 줄입니다.

2

솔루션 괜찮습니다 ... 실제로 모든 AlarmManager 인스턴스는 장치를 끄고 재부팅 할 때 지워집니다.

간단한 방법은 ... 응용 프로그램이 시작되면 먼저 AlarmManager를 만듭니다. BOOT_COMPLETED BroadcastReceiver의 onReceive에서 두 번째.

충분하면 PendingIntent.FLAG_UPDATE_CURRENT는 한 번에 하나의 활성화 된 경보 만 있는지 확인합니다.

이렇게하면 응용 프로그램이 시작될 때 경보가 등록됩니다. 이미 BOOT_COMPLETED를 통해 등록 된 경우 아무런 문제가 없습니다. 기기를 끄면 활성화 된 알람이 비활성화되지만 다음 부팅시 BroadcastReceiver가 BOOT_COMPLETED (으)로 등록 된 새 알람을 처리합니다.

귀하의 질문에 대한 답변을 결정하면 "수락"으로 표시하십시오. 이것은 당신과 나의 평판 점수를 올릴 것입니다.

또한 네트워크 사용 간격을 검토해야하므로 장치 및 사용자에게 매우 많은 리소스가 필요할 수 있습니다. 한 정책은 사용자가 앱을 시작할 때 더 긴 기간을두고 업데이트를 확인하는 것일 수 있습니다 (사용자에게 친숙하지는 않지만 많은 시스템 리소스와 배터리 전원을 절약 할 수 있음). 필요에 따라 더 나은 정책을 찾아보십시오.