2017-02-04 4 views
-2

전체 탐색 스택의 지속적인 캐싱 로직을 구현하지 않으려면 백그라운드에서라도 앱을 "활성 상태"(최소 2 시간 이상)로 유지하고 싶습니다. 따라서 사용자가 다시 열 때 그 앱은 잠들기 전의 위치입니다. 3 분 후에 iOS로 인해 앱이 종료되지 않도록하기

나는 백그라운드 작업으로 시도하지 :

_timerBackgroundTaskId = UIApplication.SharedApplication.BeginBackgroundTask(() => 
{ 
    // Run some dummy code here. Shouldn´t this prevent the task from actually stopping? 
    var remaining = UIApplication.SharedApplication.BackgroundTimeRemaining; 
    this.Log().Debug($"Expiration. Remaining: {remaining}. Timer seconds left: {_secondsLeft}"); 
}); 
// I´m actually using the timer for something :) 
_nsTimer = NSTimer.CreateRepeatingScheduledTimer(TimeSpan.FromSeconds(1), delegate { TimerTick(); }); 

// later on (after 3 minutes) 
UIApplication.SharedApplication.EndBackgroundTask(_timerBackgroundTaskId.Value); 

을 내가 노력할 상관없이, 아이폰 OS는 응용 프로그램을 죽이고 삼분 후. 가짜/조용한 배경 소리로 어떻게해야하는지 알려주는 답변이 있지만 Apple의 리뷰에는 문제가 없습니다.

어떤 조언이 필요합니까?

+1

뭔가 힘들지 않게 시도하고 수행하는 대신 앱 복원을 적절히 처리하는 것이 좋습니다. 앱 실행 시간은 3 분입니다. 이 제한은 배터리 수명을 최대화하고 사용자가 실행할 수있는 다른 앱에 메모리를 제공하도록 설계되었습니다. – Paulw11

+0

복원은 내가 피하려고하는 것이지만 다른 방법이 없다면 수행 할 것입니다. – xleon

+2

앱에서 사용 가능한 백그라운드 모드 중 하나를 적법하게 사용하지 않는 한 3 분이 지나치게 제한됩니다. – Paulw11

답변

1

내 문제의 해결책은 정확히 아무것도하지 않고처럼 쉽습니다.

기본적으로 iOS는 기기가 심각하게 메모리가 부족한 경우가 아니면 앱을 종료하지 않습니다.

배터리 방전을 방지하기 위해 백그라운드에서 작업 (예 : UIApplication.SharedApplication.BeginBackgroundTask)을 실행하면 에만이 적용됩니다.

앱이 백그라운드로 이동하기 전에 백그라운드 작업을 시작하지 않으면 상태를 유지하면서 앱이 항상있을 것입니다. (몇 시간 동안 테스트 해봤습니다.)

내 경우에는 카운트 다운/알람 작동을 유지하기 위해 백그라운드 작업을 사용하고있었습니다. 그러나 로컬 알림을 예약하는 해결 방법을 찾았습니다.

  1. 가 복원 전략을 구현 삼분
  2. 전에 작업을 종료 :

    앱 상태 피고측을 유지하기 위해 백그라운드 작업을 실행해야하는 경우

    2 옵션을 얻었다. iOS 자체는 built-in API을 제공합니다.