2013-06-09 21 views
9

Le nostre app sono attive nell'app store. Desidero riconoscere gli arresti anomali della memoria che alcuni utenti stanno ottenendo. Capisco che non c'è modo di riconoscere al 100% un arresto anomalo della memoria. C'è un modo per riconoscere questi arresti anomali (con una probabilità piuttosto grande) facendo qualche logica nell'applicazioneDidReceiveMemoryWarning? (Non sto parlando di trovarlo in xcode durante lo sviluppo, sto parlando di codice che riconoscerà l'esaurimento della memoria dagli utenti effettivi e registrerà qualcosa su file)Riconoscimento di un arresto anomalo della memoria (IOS)

+0

Gli strumenti di utilizzo (cmd + I) seguono le allocazioni. – Levi

+0

Anche se è un problema tecnico: la tua app viene interrotta a causa della poca memoria non è in realtà un 'crash' (anche se sembra che sia per il tuo utente). – occulus

+0

In generale, no. Ma, la causa più probabile di una situazione di memoria insufficiente è l'uso improprio di UIImage che provoca la memorizzazione di troppe immagini contemporaneamente. Un'altra causa molto probabile sono i cicli di conteggio dei ref in ViewControllers che rifattano altri controller di vista in un modo che causa un loop. Il problema è che spesso questi problemi si manifestano solo nel prodotto dopo che è stato rilasciato ed è in esecuzione sui dispositivi degli utenti finali. Solo un accurato processo di sviluppo e revisioni del codice possono prevenire questo tipo di problema. – MoDJ

risposta

0

Cerca il messaggio applicationWillTerminate nella tua app delegare. Questo viene chiamato se l'app viene terminata dal sistema (a causa, ad esempio, di memoria insufficiente), ma non se l'utente lascia l'app nel solito modo premendo il tasto Home. Nota: se l'app è in background e la memoria si esaurisce, l'app viene uccisa senza che vengano inviati messaggi.

YMMV, in particolare con le versioni precedenti di iOS, e vale la pena fare ricerche per garantire che quanto sopra sia accurato.

Le immagini allo this blog post sono piuttosto informative (anche se un po 'datate).

Per ulteriori informazioni, vedere How to know whether app is terminated by user or iOS (after 10min background)

+2

l'applicazioneWillTerminate si verificherà ogni volta che l'app viene interrotta a causa della memoria (quando è in primo piano)? Inoltre, verrà richiamato anche quando l'utente chiude completamente l'app (non spostandola sullo sfondo)? – AJ222

-3

In primo luogo analizzare il vostro applicazione facendo clic sul prodotto alla barra dei menu superiore del vostro Xcode e cliccare su Analizza sezione che vi mostrerà il numero di perdite sul nell'applicazione e può portarti nel luogo in cui si sono verificate le perdite. Ecco come puoi trovare la perdita di memoria e correggerla. In secondo luogo, non funziona, quindi controlla il controller della vista in cui si è verificato un arresto anomalo e controlla se hai lasciato qualsiasi oggetto da rilasciare. Spero che questo possa aiutarti a risolvere il tuo problema.

+2

Hai risposto a una domanda diversa da quella richiesta. Ha anche detto nel suo post "Non sto parlando di trovarlo in xcode durante lo sviluppo". – occulus

-2

Ci sono buone librerie di terze parti disponibili per monitorare le prestazioni della propria applicazione iOS in real time.Below 2 sono ben noti di tale categoria:

  1. Google Analytics
  2. Crittercism

Si traccia e invia i rapporti sugli arresti anomali dei dispositivi degli utenti al tuo account. Con tutta probabilità ti informano anche sugli arresti anomali avvenuti a causa della poca memoria!

https://developers.google.com/analytics/devguides/collection/ios/

https://www.crittercism.com/

Spero che questo potrebbe risolvere il problema fino a un certo punto.

3

Mentre ero alla ricerca di qualsiasi servizio o libreria che mi dia il monitoraggio OOM, ho potuto trovare solo in questo articolo dall'ingegneria Facebook:

https://code.facebook.com/posts/1146930688654547/reducing-fooms-in-the-facebook-ios-app/

L'idea è quella di dedurre il motivo per cui l'applicazione ha bisogno di essere avviato, controllando aspetti diversi (come se l'app fosse in background, se c'è un aggiornamento app/OS, ...).

Scartando tutti gli altri possibili motivi che possono forzare l'uscita della precedente app, è possibile sapere se il motivo è uno sfondo fuori dalla memoria o una memoria in primo piano.

Sarebbe bello avere una libreria che implementa la procedura di articolo di Facebook. Ma al giorno d'oggi non sono riuscito a trovarne, probabilmente c'è qualche ragione che rende difficile o potrebbe essere impossibile aggiungerlo come sdk.

Se qualcuno conosce un servizio, si prega di condividerlo con tutti con un commento o una nuova risposta.

Edit:

ho scoperto questo github (https://github.com/jflinter/JRFMemoryNoodler) con un'implementazione della procedura di post di Facebook. Non ho ancora provato, ma lo implementeremo nelle nostre app per provarlo.

+0

hai finito per provarlo? qualsiasi successo? – Johanisma

+0

@Johanisma, no stavamo per distribuire le nostre app con questa libreria (JRFMemoryNoodler) ma appena prima di chiudere la build, abbiamo deciso di rimuoverlo. Perché quando abbiamo forzato l'arresto anomalo dell'app (durante lo sviluppo), non eravamo sicuri che questo strumento potesse aiutarci a rilevare le diverse OOM (forse non abbiamo interpretato correttamente gli arresti anomali o non funzionava bene). Se trovi qualcosa, condividilo perché ha ancora OOM. –

Problemi correlati