2017-02-04 1 views
-2

Um zu vermeiden, eine persistente Caching-Logik eines ganzen Navigations-Stack zu implementieren Ich möchte meine App "lebendig" (mindestens für 2 Stunden) auch im Hintergrund, wenn der Benutzer wieder öffnet Die App ist, wo es war, bevor Sie schlafen gingen.Verhindern, iOS nach 3 Minuten meine App zu töten

Ich habe versucht, mit einer Hintergrundaufgabe:

_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); 

Egal, was ich versuche, nach 3 Minuten iOS die App tötet. Einige Antworten in SO sagen, wie man es mit einem gefälschten/stillen Hintergrundsound macht, aber ich will keine Probleme mit Apple Reviews haben.

Irgendwelche Ratschläge?

+1

Es ist besser, App-Wiederherstellung richtig zu behandeln, anstatt etwas zu versuchen und zu tun. Ihre App hat nur 3 Minuten Hintergrund-Ausführungszeit. Die Einschränkungen dienen dazu, die Akkulaufzeit zu maximieren und Speicher für andere Apps verfügbar zu machen, die der Benutzer ausführen möchte. – Paulw11

+0

Wiederherstellung ist das, was ich zu vermeiden versuche, aber ich werde es tun, wenn es keinen anderen Weg gibt. – xleon

+2

Die drei Minuten sind ein hartes Limit, es sei denn, Ihre App verwendet legitim einen der verfügbaren Hintergrundmodi. – Paulw11

Antwort

1

Die Lösung für mein Problem war so einfach wie genau nichts.

Standardmäßig iOS wird nie Ihre App töten, es sei denn, das Gerät läuft nicht genügend Arbeitsspeicher.

Die 3-Minuten-Grenze wird angewendet NUR, wenn Sie eine Aufgabe im Hintergrund ausführen (d. H. UIApplication.SharedApplication.BeginBackgroundTask), um eine Batterieentladung zu vermeiden.

Wenn Sie keine Hintergrundaufgabe starten, bevor die App in den Hintergrund geht, wird die App immer da sein und den Status beibehalten (ich habe das stundenlang getestet).

In meinem Fall verwendete ich eine Hintergrundaufgabe, um einen Countdown/Alarm zu halten. Aber ich habe gerade eine Problemumgehung gefunden lokale Benachrichtigungen zu planen.

Wenn Sie eine Hintergrund-Task ausgeführt werden muss, haben die App-Status you've zu halten 2 Möglichkeiten:

  1. Beenden Sie die Aufgabe, vor 3 Minuten
  2. eine Wiederherstellung Strategie implementieren. iOS selbst bietet eine built-in API dafür.
Verwandte Themen