Cela finira par arriver à votre question, mais je veux d'abord aborder un certain nombre de questions que vous soulevez dans vos divers commentaires aux différentes réponses déjà données au moment de la rédaction de ce document. Je n'ai pas l'intention de changer d'avis - plutôt, ceux-ci sont là pour ceux qui viendront lire ce post à l'avenir.
Le fait est que je ne peux pas autoriser Android à déterminer quand mon application va être fermée. cela doit être le choix de l'utilisateur.
Des millions de personnes sont parfaitement satisfaites du modèle où l'environnement ferme l'application au besoin. Ces utilisateurs ne pensent tout simplement pas à «terminer» l'application Android, pas plus qu'ils ne pensent à «terminer» une page Web ou à «terminer» un thermostat.
Les utilisateurs d'iPhone sont à peu près de la même manière, en ce sens que le fait d'appuyer sur le bouton iPhone ne donne pas nécessairement l'impression que l'application a été interrompue, car de nombreuses applications iPhone reprennent là où l'utilisateur s'est arrêté, même si l'application a vraiment été arrêtée (puisque l'iPhone uniquement autorise une application tierce à la fois à l'heure actuelle).
Comme je l'ai dit ci-dessus, il y a beaucoup de choses qui se passent dans mon application (les données sont POUSSÉES sur l'appareil, les listes de tâches qui devraient toujours être là, etc.).
Je ne sais pas ce que signifie "des listes avec des tâches qui devraient toujours être là", mais les "données PUSHées sur l'appareil" sont une fiction agréable et ne doivent en aucun cas être faites par une activité. Utilisez une tâche planifiée (via AlarmManager
) pour mettre à jour vos données pour une fiabilité maximale.
Nos utilisateurs se connectent et ne peuvent pas le faire chaque fois qu'ils reçoivent un appel téléphonique et Android décide de tuer l'application.
Il existe de nombreuses applications iPhone et Android qui traitent de cela. Habituellement, c'est parce qu'ils conservent les informations d'identification de connexion, plutôt que de forcer les utilisateurs à se connecter à chaque fois manuellement.
Par exemple, nous voulons vérifier les mises à jour lors de la fermeture de l'application
C'est une erreur sur n'importe quel système d'exploitation. Pour tout ce que vous savez, la raison pour laquelle votre application est «fermée» est que le système d'exploitation est en train de s'arrêter, puis votre processus de mise à jour échouera en cours de route. En général, ce n'est pas une bonne chose. Vérifiez les mises à jour au démarrage ou vérifiez les mises à jour de manière totalement asynchrone (par exemple, via une tâche planifiée), jamais à la sortie.
Certains commentaires suggèrent que le fait de cliquer sur le bouton de retour ne tue pas du tout l'application (voir le lien dans ma question ci-dessus).
Appuyer sur le bouton RETOUR ne "tue pas l'application". Il termine l'activité qui était à l'écran lorsque l'utilisateur a appuyé sur le bouton RETOUR.
Il ne doit se terminer que lorsque les utilisateurs souhaitent y mettre fin - jamais jamais autrement. Si vous ne pouvez pas écrire des applications qui se comportent comme ça dans Android, alors je pense qu'Android ne peut pas être utilisé pour écrire de vraies applications = (
Les applications Web non plus. Ou WebOS , si je comprends bien leur modèle (je n'ai pas encore eu l'occasion de jouer avec un). Dans tous ces cas, les utilisateurs ne "mettent fin" à rien - ils partent simplement. L'iPhone est un peu différent, en ce qu'il ne permet actuellement qu'une seule chose à exécuter à la fois (à quelques exceptions près), et donc le fait de quitter implique une interruption assez immédiate de l'application.
Existe-t-il un moyen pour moi de vraiment quitter l'application?
Comme tout le monde vous l'a dit, les utilisateurs (via BACK) ou votre code (via finish()
) peuvent fermer votre activité en cours. Les utilisateurs n'ont généralement besoin de rien d'autre, pour les applications correctement écrites, pas plus qu'ils n'ont besoin d'une option "quitter" pour utiliser les applications Web.
Par définition, il n'y a pas deux environnements d'application identiques. Cela signifie que vous pouvez voir les tendances dans les environnements à mesure que de nouveaux surviennent et que d'autres s'enfouissent.
Par exemple, il y a un mouvement croissant pour essayer d'éliminer la notion de "fichier". La plupart des applications Web n'obligent pas les utilisateurs à penser aux fichiers. Les applications iPhone n'obligent généralement pas les utilisateurs à penser aux fichiers. Les applications Android n'obligent généralement pas les utilisateurs à penser aux fichiers. Etc.
De même, il existe un mouvement croissant pour tenter d'éliminer la notion de «résiliation» d'une application. La plupart des applications Web ne forcent pas l'utilisateur à se déconnecter, mais le déconnectent implicitement après une période d'inactivité. Même chose avec Android, et dans une moindre mesure, iPhone (et éventuellement WebOS).
Cela nécessite de mettre davantage l'accent sur la conception d'applications, de se concentrer sur les objectifs commerciaux et de ne pas s'en tenir à un modèle de mise en œuvre lié à un environnement d'application précédent. Les développeurs qui n'ont pas le temps ou l'envie de le faire seront frustrés par les nouveaux environnements qui brisent leur modèle mental existant. Ce n'est pas la faute de l'un ou l'autre environnement, pas plus que ce n'est la faute d'une montagne pour les tempêtes qui coulent autour d'elle plutôt que de la traverser.
Par exemple, dans certains environnements de développement, comme Hypercard et Smalltalk, l'application et les outils de développement étaient mélangés dans une seule configuration. Ce concept n'a pas fait grand bruit, en dehors des extensions de langage pour les applications (par exemple, VBA dans Excel , Lisp dans AutoCAD ). Les développeurs qui ont proposé des modèles mentaux qui supposaient l'existence d'outils de développement dans l'application elle-même ont donc dû soit modifier leur modèle, soit se limiter à des environnements où leur modèle resterait vrai.
Ainsi, lorsque vous écrivez:
Avec d'autres choses désordonnées que j'ai découvertes, je pense que le développement de notre application pour Android ne se fera pas.
Cela semblerait être pour le mieux, pour vous, pour le moment. De même, je vous déconseille de tenter de porter votre application sur le Web, car certains des mêmes problèmes que vous avez signalés avec Android se retrouvent également dans les applications Web (par exemple, pas de "résiliation"). Ou, à l' inverse, si un jour vous faites le port de votre application sur le Web, vous pouvez constater que le flux de l' application Web peut être une meilleure adéquation pour Android, et vous pouvez revenir sur un port Android à ce moment - là.