Comment éviter de l'Activité de pause délai d'attente pour la ActivityRecord` erreur?
WAY1:
@Override
protected void onPause() {
super.onPause();
//do something urgent
doSomething();
}
WAY2:
@Override
protected void onPause() {
//do something urgent
doSomething();
super.onPause();
}
La différence est la séquence d'appel de doSomething()
et super.onPause()
. Lorsque j'utilise le WAY1, si le doSomething()
coût trop, je reçois le message d'erreur: W/ActivityManager( 4347): Activity pause timeout for ActivityRecord
.
Puis-je éviter le pause timeout
erreur si j'utilise WAY2 ?
J'ai vérifié le PSBA , mais c'est trop dur pour moi de comprendre l'invocation de la procédure de l'Activité.
Selon developer.android.com/intl/es/training/basics/... vous devez toujours appeler la méthode de la superclasse première
Oui. J'ai vu qu'. Savez-vous la raison ?
stackoverflow.com/a/9626268/1320616 et stackoverflow.com/a/18874519/1320616 correctement vous expliquer tout ce que vous devez savoir
Oui. J'ai vu qu'. Savez-vous la raison ?
stackoverflow.com/a/9626268/1320616 et stackoverflow.com/a/18874519/1320616 correctement vous expliquer tout ce que vous devez savoir
OriginalL'auteur Jerikc XIONG | 2016-03-09
Vous devez vous connecter pour publier un commentaire.
La documentation dit que
Si vous jetez un oeil à la
ActivityStack
classe qui est utilisée pour "l'État et la gestion d'une pile unique des activités.", il définitDonc, si les opérations effectuées par
onPause()
dépassez ce délai, vous recevrez le messageActivity pause timeout
.Que ce délai n'est fixé pour la durée de la pause de l'Activité et
onPause()
est juste une méthode de rappel qui permet de réaliser des opérations lorsqu'une Activité s'interrompt, modification de l'ordre (WAY1 ou WAY2) n'affectera pas le délai d'attente (il sera déclenché à la fois dans WAY1 et WAY2). Pour le prouver, ces deux codes imprimer leActivity pause timeout
message:Comme une note de côté, comme je le dis dans mes commentaires, la documentation vous dit que vous devez toujours appeler la méthode de la superclasse premier abord, mais comme @ankit aggarwal unis, Quel est l'ordre correct d'appeler les méthodes de la superclasse dans onPause, onStop et onDestroy méthodes? et Pourquoi? est une très bonne réponse en expliquant si WAY2 est mieux que WAY1, et pourquoi.
OriginalL'auteur antonio
Non, vous ne le soit pas.
Que faites-vous dans
doSomething();
méthode? le nettoyage ne devrait pas prendre beaucoup de temps.Si vous l'envoi de données sur internet ou enregistrer des données dans la DB? Déplacer ce code à un
Service/IntentService
ou unThread
.Appel
super.xxx()
première oumyMethod()
en premier?Pour moi je préfère:
super.xxx()
PREMIÈRE dans les méthodes de démarrageonCreate() /onStart() /onResume()
super.xxx()
DERNIER dans l'arrêt de méthodesonPause() /onStop() /onDestroy()
Avec cette approche, vous maintenir la pile d'appel,
Android
initialisé tout dans l'Activité (par exemple) avant de l'utiliser. et vous nettoyé vos variables avant de lesAndroid
commencer le nettoyage de laActivity
doSometing
. Dans certains appareils, leCamera#release()
coût trop de temps et la cause de laW/ActivityManager( 4347): Activity pause timeout for ActivityRecord
. Je veux savoir quand commencer l'enregistrement pour letimeout
.remplacer
doSomething();
avecCamera#release()
seul et essayez de nouveau. pour voir si c'est parce que d'autres le code à l'intérieur dedoSomething();
OriginalL'auteur JafarKhQ