안드로이드에서 장기간 운행 서비스를위한 최고의 아키텍처
-
12-12-2019 - |
문제
나는 장거리 서비스를 죽이는 OS를 처리하는 방법에 대한 지침에 대해 감사 드리겠습니다.
비즈니스 시나리오 :
응용 프로그램은 몇 시간 동안 지속될 수있는 BTT 트랙을 기록합니다. 관련 통계와 함께지도에 트랙을 표시 할 수도 있습니다.
응용 프로그램 사용자 인터페이스를 사용하면 사용자가 트랙 레코딩을 시작 / 중지하고지도에서 실시간 트랙을 볼 수 있습니다.
트랙 녹화를 시작한 후 사용자는 응용 프로그램을 종료하고 화면을 끄고 (전원을 절약하기 위해) 사용자가 활동을 다시 시작하고 요청할 때까지 녹화 업데이트를 데이터베이스 (알림 표시)로 유지하려면 서비스 만 실행됩니다. 녹음을 중지하기 위해 서비스가 종료됩니다.
문제 :
40 분에서 1 시간 반으로 실행되는 가변 시간이 지나면 기록 서비스가 경고없이 중지됩니다. BTT 출연은 몇 시간이 걸릴 수 있으므로 궤도 녹음이 불완전합니다.
몇 가지 추가 정보 :
서비스는 START_STICKY
로 시작되어 PARTIAL_WAKE_LOCK
를 획득하고 주요 활동과 동일한 프로세스에서 실행됩니다.
새 위치는 사용자 정의 속도로 1 초에서 수 분까지 사용자 정의 속도로 획득 (및 기록)됩니다. 나는 Android 문서에서 알고있다. 이것은 장기간 운행 서비스에 대한 예상 OS 동작이다.
질문 :
비즈니스 시나리오 요구 사항을 충족시킬 수있는 잘 작동 한 응용 프로그램을 잘 갖도록 최상의 아키텍처 설계 방식은 무엇입니까?
나는 몇 가지 옵션을 생각할 수 있습니다 (그리고 나는 그들 중 누구라도 좋아하지 않습니다). 그러나 나는 누군가의 지침을 이미 직면하고 비슷한 문제를 해결하고 해결할 것입니다 :
- 방송 수신기를 사용하십시오 (가능한 경우 위치 관리자에 이상적으로 연결됨)을 사용하여 새 위치에서만 서비스 만 실행하십시오. 획득 됨?
- 사용자가 주 활동을 남길 수 없게하지 마십시오 (사용자 경험을 쏟아냅니다)?
- 는 필요에 따라 서비스를 다시 시작하는 알람 방송 수신기가 있습니까?
이 주제에 지혜를 공유 할 수있는 모든 사람들에게 감사드립니다.
해결책
나는 매우 비슷한 것을하는 앱을 가지고 있습니다.전경 작업으로 서비스가 계속 실행되는지 확인하십시오.실행을 시작할 준비가되면이 기능을 호출합니다.
알림을 설정합니다.void fg() {
Notification notification = new Notification(R.drawable.logstatus,
"Logging On", System.currentTimeMillis());
Intent notificationIntent = new Intent(this, LoggerActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(this, "Logger","Logger Running",
pendingIntent);
startForeground(1, notification);
}
.
로깅이 완료되면 전경 모드를 떠나십시오.
stopForeground(true);
.