Une application inattendue se bloque sur Android et comment les gérer
Il existe deux façons de résoudre ce problème. En fonction de la situation dans laquelle vous vous trouvez, vous pouvez décider avec laquelle aller de l’avant:
Solution 1:
Une solution simple et pratique serait de vérifier si notre processus d’application existant a été supprimé et recréé lorsque l’utilisateur reprend l’application en arrière-plan. Si oui, vous pouvez revenir à l’écran de lancement, afin qu’il apparaisse comme un nouveau scénario de lancement d’application.
Vous pouvez placer ce code suivant dans votre BaseActivity:
- Enregistrez votre PID dans un ensemble en remplaçant la fonction «onSaveInstanceState».
- Dans la méthode «onCreate», comparez le PID actuel et le PID du bundle.
- Redirigez vers l’activité Splash, si le processus a été recréé.
Lorsque l’utilisateur revient à l’application depuis l’arrière-plan, si le processus d’application a été tué, l’application redémarrerait à partir de SplashActivity comme s’il s’agissait d’un nouveau lancement d’application.
Cela empêchera l’application d’accéder à toutes les ressources qui pourraient avoir été perdues pendant la recréation du processus et empêchera ainsi l’application de se bloquer.
Bien que cette solution prévienne un plantage, cette approche redémarre l’application plutôt que de reprendre l’application à partir de l’endroit où elle a été interrompue. Si vous rencontrez ce problème dans une application de production et cherchez désespérément une solution rapide, cette solution devrait bien fonctionner pour vous.
Cependant, si vous avez récemment commencé le développement à partir de zéro, la solution 2 serait idéale pour vous car elle reprendra l’application d’où elle a été interrompue
Solution 2:
À présent, vous devez avoir remarqué que vous pouvez enregistrer et accéder aux données des objets « Bundle ». Enregistrez toutes les informations nécessaires dans chaque activité / fragment, comme nous l’avons fait dans l’exemple précédent.
Étant donné que nous accédons à des données enregistrées dans un ensemble, le plantage de l’application doit être évité et l’application doit reprendre là où elle a été laissée. Toutes les autres activités / fragments seraient également recréés.
Pour une RecyclerView dans un fragment, cela ressemblerait à ceci:
- Enregistrez les informations requises dans un objet Bundle en remplaçant la fonction «onSaveInstanceState».
- Vérifiez si les données de l’ensemble sont disponibles dans la fonction «onViewCreated», sinon, récupérez les données de la source via ViewModel.