Android Application Redémarre sur arrêt/de la force de fermeture
Mon application android est l'obtention d'un redémarrage après l'forcer la fermeture, par le biais de l'ensemble de mon application qui se composent de 20 activités, je me fonde sur des données statiques créés sur une activité principale. Donc, une fois que l'application est plantage toutes mes données statiques est de se perdre et lorsque l'application automatique redémarre en pratique, il n'a pas toutes les données essentielles afin d'opérer sur.
Ma question est, sur crash je veux ce que les choses arrivent
- Si l'application se bloque, je ne veux pas l'application de redémarrer plutôt je veux que toute la pile de tâches liées à cette application pour être effacé de la mémoire. Un utilisateur peut recommencer depuis le début
- Si je ne peux pas empêcher l'application de redémarrer, au moins je veux préserver les données essentielles de sorte que lorsque l'application redémarre je peut les affecter en retour. Aussi, quand il redémarre, je veux que mon application pour démarrer à partir de l'activité principale.
Je sais que lorsque l'activité des plantages du système android va apporter de l'activité suivante dans la pile de premier plan, et c'est la raison pour mon app produire des résultats redondants. aussi je suis passé par les développeurs android mais la seule chose que j'ai appris à connaître, mise en place d'un attribut dans le Manifeste android:finishOnTaskLaunch="true"
. Mais malheureusement ce n'est d'aucune aide pour moi. Je vous remercie de votre aide sur la résolution de ce problème, et m'a permis de connaître la cause et de l'analyse.
- Fil de discussion.setDefaultUncaughtExceptionHandler(nouveau UncaughtExceptionHandler); il suffit de googler!
- vérifier cet article pour redémarrer votre application sur un cas d'exception.
Vous devez vous connecter pour publier un commentaire.
Meilleure solution serait plutôt de l'utilisation de données Statiques, utilisez
Shared Preferences
ou stocker des données dans unDatabase
et si toutuncaught Exception
se produit, afficher un message commeApplication has crashed and a report is sent to the admin
puis redémarrez l'Activité qui a causé le Crash. De cette façon, l'utilisateur peut continuer à utiliser l'application.Faire la même chose mais au lieu de redémarrer l'Activité qui a causé l'Exception de redémarrer l'application.
créer une classe utilisée pour gérer
unCaughtException
et dans chaque Activité, créez un Objet de cette classe et le définir comme le
DefaultUncaughtExceptionHandler
import android.os.Process;
pour éviter les conflits avec la valeur par défautjava.lang.Process
.(référence: Archie.bpgc)
Si l'utilisateur est de forcer l'arrêt de votre application (dans Paramètres > Applications > informations sur l'Application, ou de la récente liste des applications) ou le système d'exploitation est l'arrêt de votre application, vous pouvez sauvegarder ce que vous avez besoin de l'aide de
onSaveInstanceState()
.Toutefois, si votre application est en panne, alors il n'y a pas beaucoup que vous pouvez faire à ce sujet (à part périodiquement sauver des choses importantes à préférences/bases de données/etc.). Il est probablement préférable de se concentrer sur la prévention des accidents, plutôt que d'essayer de gérer les blocages!
Ne pas stocker des données dans des champs statiques.
Votre processus pourrait être arrêté sur le bas de la mémoire de l'événement et vous aurez tout perdu.
Vos activités seront restaurées à partir de l'état enregistré si l'utilisateur commutateur à votre application, mais vos variables statiques ne sera pas restauré.
Bien, une application n'est pas seulement de l'interface(les activités). Imaginez que vous avez certains d'applications d'entreprise complexes, à l'aide de SQL transactions, la sécurité, l'Authentification Web, etc..
Il est presque impossible de faire de chaque activité en mesure de récupérer l'ensemble de l'application de contexte à l'aide de seulement Partagé Préférences.
Donc, dans ce cas, j'utilise ce bout de Code:
Mon application a été également repris avec écran vide, quand il a été s'est écrasé. Pour résoudre ce problème, j'ai vérifié le savedInstanceState objet sur la méthode onCreate de mon activité principale, et si elle n'est pas null (ce qui signifie qu'il est repris par système android) puis j'ai fini mon activité. Quelque chose comme ça:
Il peut être utile dans votre cas aussi.