Fragment de l'Activité de l'application est mort, pas de sauvegardes de l'état
Je suis face à un problème très déroutant pour un très petit nombre de mes utilisateurs. L'erreur se produit lorsqu'une touche est enfoncée à l'intérieur d'un Fragment, qui commence un autre Fragment de l'Activité. Voici la trace de la pile:
I/20:22:23.901 ActivityManager( 1668)
Start proc com.brandall.nutter for activity com.brandall.nutter/.ActivityHomeFragment: pid=8956 uid=10125 gids={50125, 3003, 3001, 3002, 1015, 1023, 1006, 1028}
I/20:22:23.881 WindowState( 1668)
WIN DEATH: Window{41ed1948 u0 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment}
W/20:22:23.881 ActivityManager( 1668)
Force removing ActivityRecord{411c4188 u0 com.brandall.nutter/.ActivityLinkAppsFragment}: app died, no saved state
I/20:22:23.881 WindowState( 1668)
WIN DEATH: Window{41b6a178 u0 Toast EXITING}
W/20:22:23.881 InputDispatcher( 1668)
Attempted to unregister already unregistered input channel '41ed1948 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment (server)'
W/20:22:23.871 ActivityManager( 1668)
Scheduling restart of crashed service com.brandall.nutter/.TTSS in 80000ms
I/20:22:23.871 ActivityManager( 1668)
Process com.brandall.nutter (pid 8907) has died.
I/20:22:23.871 WindowState( 1668)
WIN DEATH: Window{411d4ff0 u0 com.brandall.nutter/com.brandall.nutter.ActivityHomeFragment}
E/20:22:23.871 InputDispatcher( 1668)
channel '41ed1948 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment (server)' ~ Channel is unrecoverably broken and will be disposed!
W/20:22:23.871 InputDispatcher( 1668)
channel '41ed1948 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment (server)' ~ Consumer closed input channel or an error occurred. events=0x9
En raison de cette ligne de l'erreur:
com.brandall.nutter/.ActivityLinkAppsFragment}: app died, no saved state
J'ai lu de nombreux posts sur Fragment enregistré unis, mais aucune ne semble s'appliquer dans ma situation, plutôt les Fragments eux-mêmes, qui ne sont pas mentionnés dans la trace de la pile. Les messages d'autres suggèrent d'ajouter à chaque Fragment:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
J'ai actuellement ne sont pas surcharger la méthode onCreate dans aucun de mes Fragments.
J'ai aussi vu a suggéré d'ajouter ce pour chaque Fragment:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
setUserVisibleHint(true);
}
En dehors du fait que ça n'arrive qu'à un très petit nombre d'utilisateurs, la plus embarrassante question est le Contexte utilisé:
final Intent sa = new Intent(getActivity(), ActivityLinkAppsFragment.class);
getActivity().startActivity(sa);
Ma demande a un de premier plan de Services et si j'utilise plutôt le Contexte statique (par le biais d'un statique getServiceContext ()) dans le but ci-dessus, le problème ne se produit plus pour les utilisateurs et le Fragment d'Activité s'ouvre correctement.
Je ne comprends pas pourquoi l'utilisation d'un autre Contexte, doit empêcher le problème de se produire, mais j'espère, avec l'information que j'ai fournie, il aura un sens pour quelqu'un!
Je peux fournir le FragmentPagerAdapter code, je suis en utilisant si cela s'avère pertinent, mais c'est assez standard.
Je vous remercie à l'avance
MODIFIER - quelque Chose de très important que j'ai oublié d'ajouter. Cela n'entraîne pas l'application de crash. Au lieu de l'Activité à partir de laquelle le Fragment est, qu'il aura redémarré immédiatement.
RÉPONSE - Cela a été causé en raison de m'appeler System.exit(0)
dans des circonstances que je pensais possible uniquement lorsque l'utilisateur a voulu 'flush' l'utilisation de la mémoire de l'application. J'ai eu tort, et elle pourrait également être appelée lorsque l'utilisateur de l'appareil a été le traitement des basses conditions de mémoire. @beworker la réponse ci-dessous est marquée comme étant correcte, comme il a noté ActivityManagerService.handleAppDiedLocked()
qui est le résultat de ce.
Activity
et de manutention startActivity
là? Fragments
ne faut jamais commencer leur propre Activities
car il n'y a aucun moyen pour eux de savoir si une Activité doit être commencé, ou un Fragment devraient être ajoutés ou remplacés. Aussi, pourquoi êtes-vous à l'aide de Intent.FLAG_ACTIVITY_NEW_TASK
ici?Le Drapeau ne doit pas être là - Désolé d'être misleadinng, il reste dans de mes tests, je vais l'enlever de la question. Comme je gérer mes Activités très simple pile, je n'ai jamais eu à examiner si oui ou non ils "devraient être commencé". Je vais rechercher l'approche de l'auditeur que vous décrivez. Je vous remercie.
pouvez-vous partager Fragment de la
onClick()
et du cycle de vie des méthodes?Merci de vouloir aider - je peux réduire le code à un seul bouton et toujours répliquer. Le code serait presque identique à celle de l'exemple. javacodegeeks.com/2013/04/... C'est un petit nombre d'utilisateurs ce problème se produit pour.
OriginalL'auteur brandall | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
J'ai regardé dans le code source Android pour le message dans la trace de la pile et découvert qu'il vient de
ActivityManagerService.handleAppDiedLocked()
méthode.Les Descriptions de cette méthode dit:
Cela se produit lorsque l'application se fait tuer. Il peut être tué par le système, par une autre application (par exemple, un gestionnaire de tâches app) ou lorsque l'application est terminée par lui-même (par exemple,
System.exit(0)
).J'ai vérifié avec quelques-uns de mes utilisateurs avec ce problème et qu'ils n'ont pas un tueur de tâches installé... j'espérais vraiment vous avez eu raison!
Vous avez eu raison, Non à partir d'un point de vue, mais à partir de mon application dans l'app. J'étais Système d'appel.exit(0); dans certaines circonstances que je pensais n'aurait jamais été exécuté, je me suis trompé, ça arrive, je suppose, sous la lourde charge de mémoire. C'est cette réponse qui reliait les deux - stackoverflow.com/a/14756126/1256219 Si vous souhaitez mettre à jour votre réponse avec une référence à ce poste, et comment vous saviez que c'était ActivityManagerService.handleAppDiedLocked() liées, je vais le marquer comme étant correcte. Merci!!!!
Si vous voulez mettre à jour votre réponse, je vais l'accepter?
J'ai mis à jour le message, mais je ne suis pas sûr chaud pour consulter un message que vous avez posté dans le commentaire. Il n'est pas lié aux questions. Vous n'avez pas de mentionner que vous avez utilisé
System.exit(0);
. Sinon, vous devez immédiatement dit que c'est le problème.OriginalL'auteur sergej shafarenka