Aller au contenu

Savoir si mon application est "active"


Pierre87

Recommended Posts

C'est une question que j'avais posé il y a quelques temps, mais la solution que l'on m'avait proposé ne me convient plus pour mon nouveau projet :(

Je considère que mon application est "active" si celle ci a une Activity "à l'écran".

Comme je n'ai rien trouvé de "simple",

on m'a proposé d'utiliser le pattern observer : déclarer chaque Activity auprès d'un objet, ce qui me permet d'avoir la liste de mes Activity ouvertes.

Ca marche quand on a pas beaucoup d'Activity, mais dans mon nouveau projet, j'en ai des dizaines.

Donc je suis de nouveau à la recherche de cette fonction magique :D

Vous avez une idée ?

Merci !

Lien vers le commentaire
Partager sur d’autres sites

Salut Pierre, je suppose que ta question fait suite à https://forum.frandroid.com/forum/viewtopic.php?pid=112055#p112055

As tu regardé comment Android gérait les applications au niveau de la mémoire ?

Une application reste en mémoire, tant qu'il y a de la mémoire dispo selon la config d'Android. Si Android a besoin de place, il sauve l'état d'une Activité jette le reste et instancie la nouvelle.

Donc en effet, la seule Activity vraiment active est celle qui est présentée à l'écran :)

Une méthode pourrait consister à notifier une Activity "Main" lors de la création d'une activité à partir d'un état sauvegardé :

protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.subActivity);
       if (savedInstanceState != null) {
         notify(Main.this);
       }
   }

Il y a aussi

Activity#onPause()

Mais ta question manque un peu de clarté :

_ Est ce que tu pars d'un service et que tu cherches dans ce service à savoir si ton appli a été lancée ?

_ Au lancement de l'appli tu veux explorer la stack des Activity de ton appli pour en trouver une en particulier ?

Il me semble qu'il suffit de vérifier l'Activity qui est en haut de ta pile ... enfin difficile de s'y retrouver pour un débutant comme moi :d

Une méthode consiste à implémenter un Broadcast Receiver dans la méthode onStart() de tes sous activités :) Ensuite pour vérifier q'une Activity est active il suffit d'envoyer un ordered broadcast (Context.sendOrderedBroadcast) si tu recois une réponse alors tu as une Activity qui est là !

Elle est pas belle la vie ?

Lien vers le commentaire
Partager sur d’autres sites

Ouais, le problème comme je le disais, c'est que j'ai des dizaines d'Activity.

Je n'ai pas envie de me casser la tête dans chacune en ajoutant un bout de code :/

C'est un peu "moche"

En effet, je suis plus ou moins dans le cadre d'un service : c'est un Thread crée manuellement

Je n'utilise pas de Service (Android), car mon Thread/service n'a pas de raison d'exister quand mon application n'est pas "active"

Pour le stack d'Activity, je suis très curieux !

J'ai entendu dire que ça existait, mais je n'ai jamais rien trouvé comme code concret à ce sujet :/

Lien vers le commentaire
Partager sur d’autres sites

Le stack d'Activity, c'est ce qu'utilise Android pour revenir naturellement à l'Activity précédente en utilisant la fonction retour du phone.

A chaque nouvelle création d'Activity, l'état de la précédente est sauvegardé dans la stack, et la nouvelle Activity est mise au dessus (on top). Il y a pas mal de flags et d'options, mais c'est assez restreint car on veut que ce soit l'OS qui gère tout ça (pas toush les maychant dayve d'applis).

Tu ne veux pas utiliser de service ? Mais alors qu'est ce qui a besoin de savoir si ton appli est active ou non :) ? Car la seule Activity qui fonctionne sans être un service est celle qui est active ... Un service est justement une sorte d'Activity qui fonctionne sans être à l'écran.

Lien vers le commentaire
Partager sur d’autres sites

Pour le stack d'Activity, c'est bien ce qui me semblait, on ne peux pas y toucher ^^ (c'est MAL)

Je n'ai pas envie d'utiliser de service, pour plusieurs raisons :

- le système de service a changé entre Android 1.x et 2.x , et j'ai envie de rester compatible sans me prendre la tête

- je suis assez familier avec la gestion des Thread manuelle

Un Service et un Thread, c'est plus ou moins la même chose, non ?

Enfin ... ça répond à la même question quoi :D

Lien vers le commentaire
Partager sur d’autres sites

Hmm oui enfin je suis curieux de s'avoir quelles méthodes tu utiliser pour faire ton parallélisme :) Me semblait que la DVM gère ça en solo :O

Dans tous les cas la solution du Broadcast/BroadcastReceiver c'est du solide et tu peux utiliser ça n'importe où alors je t'incite à la mettre en oeuvre ^^

Si tu utilise Eclipse exctract superclass AbstractSubActivity hop j'override onStart super.onStart(); registerBroadCastReceiver() ;onStop(); unRegisterBroadcastReceiver(); pis walà quoi

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...