Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
3.913 Beiträge
 
Delphi 12 Athens
 
#2

AW: iOS App in TestFlight gibt out of memory Fehler auf iPhone

  Alt 30. Jun 2015, 13:45
Hallo zusammen,

ich habe auf iOS 8.3 die AppEvents wie folgt abgefangen, insbesondere das LowMemory Event:

Code:
function TFormMain.EvOnAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
var
 iDo : Integer;

begin

  Result := True;

  case AAppEvent of
    TApplicationEvent.FinishedLaunching  : begin
                                              {$IFDEF _X_USE_DEBUG}
                                                 DoLogDebugInfo('OnFinished launching');
                                              {$ENDIF _X_USE_DEBUG}
                                            end; // Ihre Anwendung wurde aufgerufen.
    TApplicationEvent.BecameActive       : begin
                                              {$IFDEF _X_USE_DEBUG}
                                                 DoLogDebugInfo('OnBecameActive');
                                              {$ENDIF _X_USE_DEBUG}
                                            end; // Ihre Anwendung hat den Fokus erhalten.
    TApplicationEvent.WillBecomeInactive : begin
                                              {$IFDEF _X_USE_DEBUG}
                                                 DoLogDebugInfo('OnWillBecomeInactive');
                                              {$ENDIF _X_USE_DEBUG}
                                            end; // Ihre Anwendung verliert gerade den Fokus.
    TApplicationEvent.EnteredBackground  : begin
                                              {$IFDEF _X_USE_DEBUG}
                                                 DoLogDebugInfo('OnEnteredBackgound');
                                              {$ENDIF _X_USE_DEBUG}
                                            end; // Der Benutzer verwendet die Anwendung nicht mehr, aber Ihre Anwendung wird noch im Hintergrund ausgeführt.
    TApplicationEvent.WillBecomeForeground: begin
                                              {$IFDEF _X_USE_DEBUG}
                                                 DoLogDebugInfo('OnWillBecomeForeground');
                                              {$ENDIF _X_USE_DEBUG}
                                            end; // Der Benutzer verwendet Ihre Anwendung jetzt, die sich zuvor im Hintergrund befunden hat.
    TApplicationEvent.WillTerminate      : begin // Der Benutzer beendet Ihre Anwendung.
                                              iDo := 0;
                                              {$IFDEF _X_USE_DEBUG}
                                                 DoLogDebugInfo('OnWillTerminate');
                                              {$ENDIF _X_USE_DEBUG}
                                            end;
    TApplicationEvent.LowMemory          : begin // Must Cleanup
                                              iDo := 1;
                                              if Assigned(FFrmGroundplan) and
                                                 (TabControlMain.ActiveTab = TabItemViewGroundPlan) then
                                              begin
                                                TabControlMain.ActiveTab := TabItemViewProjects;
                                              end;
                                              if Assigned(FFrmSketchPlan) and
                                                 (TabControlMain.ActiveTab = TabItemViewSketch) then
                                              begin
                                                TabControlMain.ActiveTab := TabItemViewProjects;
                                              end;
                                              if Assigned(FFrmImagePlan) and
                                                 (TabControlMain.ActiveTab = TabItemViewImage) then
                                              begin
                                                TabControlMain.ActiveTab := TabItemViewProjects;
                                              end;

                                              {$IFDEF _X_USE_DEBUG}
                                                 DoLogDebugInfo('Low memory handled');
                                              {$ENDIF _X_USE_DEBUG}

                                            end;
    TApplicationEvent.TimeChange         : ; // Die Zeit wurde signifikant geändert.
                                               // Dieses Ereignis kann beispielsweise beim Tageswechsel oder beim Wechseln in oder aus der Sommerzeit auftreten.
    TApplicationEvent.OpenURL            : ; // Ihre Anwendung hat eine Anforderung zum Öffnen eines URL empfangen.
//  Anwendungsereignisse dieses Typs sind normalerweise einem Kontext zugeordnet.
//  Dieser Kontext ist eine Instanz der iOS-spezifischen Klasse TiOSOpenApplicationContext, die die folgenden schreibgeschützten Eigenschaften bereitstellt:
//  TiOSOpenApplicationContext.SourceApp ist ein String, der die Bundle-ID der Anwendung enthält, von der Ihre Anwendung die Anforderung zum Öffnen des URL erhalten hat.
//  TiOSOpenApplicationContext.URL ist der zu öffnende URL, entweder eine Netzwerkressource oder eine Datei.
//  TiOSOpenApplicationContext.Context ist ein Zeiger auf ein Eigenschaftslistenobjekt, das gegebenenfalls zusätzliche Informationen bereitstellen kann.
//  In der iOS API reference documentation finden Sie weitere Informationen.
  end;


end;
es sollten beim Debug-Modus alle Log-Mesages in dem Logger angezeigt werden, auch die LowMemory.
Die echte LowMemory sollte dann eigentlich nicht, zumindest nicht sofort, kommen.
Die AppEvents funktionieren auch wirklich, weil die Messages im Logger ankommen und angezeigt werden.

Aber ich bekomme auf manchen (nicht allen) Testgeräten trotzdem eine LowMemory-Meldung vom System,
diese sind dann auch nicht in den Logs eingetragen, obwohl z.B. "OnBecameActive" als letztes drinsteht.

Es scheint also das die AppEvents auf manchen Geräten "umgangen" werden kann.
(und ich rede hier von iPhone 5S und 6 Plus, also keine allzu alten Brötchen).

Hat das schonmal jemand gesehen, und vielleicht einen Tip für mich ?

Rollo
  Mit Zitat antworten Zitat