2016-04-08 2 views
0

J'ai lu toutes les questions liées à l'abandon de l'application Android. Mais je ne pouvais pas trouver la réponse à mon problème.Comment les applications Android se terminent-elles?

Alors, quel est mon problème. Mon application est un lecteur de musique écrit en Qt (C++/QML). Je l'ai écrit spécialement pour ma voiture. D'abord c'était un UMPC avec Windows, maintenant j'ai une unité centrale de marché des pièces de rechange avec Android. J'ai réussi à porter mon lecteur sur Android. Maintenant, j'essaie de résoudre le problème suivant. Si je ferme ma voiture, l'ordinateur "Android" à l'intérieur de ma radio s'éteint également. Je voudrais enregistrer la piste actuelle et la progression de la piste pour pouvoir la reprendre au prochain démarrage.

Est-il possible d'attraper le signal d'Android que mon application doit fermer et enregistrer les paramètres? Ou est-ce qu'Android tue mon application sans me donner une chance d'y réagir?

Actuellement, je sauvegarde la progression dans une base de données toutes les 10 secondes. Mais je ne le sens pas idéal. Je voudrais savoir comment les applications sont fermées dans Android dans ces situations:

1) L'application est en arrière-plan et OS décide qu'il a besoin de plus de RAM et mette fin 2) L'utilisateur invoque un menu de commutation app glisse mon application loin 3) Le système s'éteint 4) Un «économiseur de batterie» (tueur de tâches) ferme mon application

Puis-je réagir à certaines de ces situations et faire quelque chose avant que mon application ne soit fermée?

+0

Avez vous essayez 'onDestroy()'? –

+0

Je l'écris en utilisant C++, donc je ne peux pas obtenir ce signal. – JeCh

Répondre

1

enter image description here

S'il vous plaît se référer ce car il est trivial plus de compréhension sur Activity life cycle

+0

OK, je vais essayer d'implémenter une partie Java de mon application et j'essaierai de regarder le signal onDestroy(). – JeCh

+0

Mais selon la documentation, mon application peut être tuée sans appeler le onDestroy de toute façon. Alors, que se passe-t-il exactement si le système s'arrête? Ce signal est-il émis et aurai-je le temps de sauvegarder les réglages? – JeCh

+0

Essayez de lire ce http://android-developers.blogspot.in/2010/04/multitasking-android-way.html –

0

Si vous utilisez ApplicationWindow (vous mentionnez que vous utilisez QML donc vous devriez utiliser que):

onClosing: { 
    saveYourSettings() 
    close.accepted = true 
} 
+0

Malheureusement, ce n'est pas si simple. C'était ma première tentative qui ne fonctionnait même pas sur les systèmes d'exploitation de bureau. J'ai besoin d'appeler la fonction "saveSettings" sur la partie C++. Mais les applications étaient parfois fermées avant que les paramètres ne soient sauvegardés, ou ils sont sortis avec une erreur. À la fin, j'ai implémenté un eventFilter qui récupère QEvent :: Close et enregistre les paramètres avant que mon application ne se ferme. Malheureusement, cela ne fonctionne pas sur Android. – JeCh

+1

Vous pouvez appeler des fonctions C++ à partir de QML, les exposer simplement en tant que membres d'un objet de propriété de contexte. En outre, il fonctionne comme prévu sur les plates-formes de bureau, testé sous Windows et Linux. – dtech

+0

Désolé, j'ai posté mon commentaire avant qu'il ne soit terminé. Je sais comment appeler une fonction C++ de QML et vice-versa, mais comme j'ai écrit cela ne fonctionne pas. J'ai trouvé une solution qui fonctionne partout à l'exception d'Android (ou peut-être d'autres systèmes d'exploitation mobiles) parce qu'ils ont un cycle de vie de l'application différente, puis bureau. – JeCh