문제

나는 장거리 서비스를 죽이는 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);
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top