IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Retour à l'activite précédente à heure fixe


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Points : 31
    Points
    31
    Par défaut Retour à l'activite précédente à heure fixe
    Bonjour,

    Mon application comporte 2 activités, l'une étant appelé par la première en lui passant un argument. Mon, problème est qu'à heure fixe, il faudrait que cette activité laisse place à la première (comme si l'on appelait un onBackPressed()).

    Quelle serait la meilleure solution pour obtenir ce résultat ?

    D'avance merci pour vos suggestions

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    Sans être un grand expert, ni en sachant ce que font tes activités, il faut que tu lances soit un Thread, soit une tache dans ta seconde activité ce qui permettra de tourner en arrière plan et d'être indépendamment du reste pour éviter d'être bloquant. Une fois cela, tu boucles en faisant à chaque itération une vérification si l'heure est égale à celle que tu veux.

    Une fois que la condition est rempli, tu fermes l'activité et ce qu'il faut en revoyant soit avec un résultat ou non.

    Pour obtenir une condition à heure fixe, il suffit de vérifier l'heure en faisant un extract des mins et des secondes et ensuite vérifier si c'est égale à 0, mais laisse toi une marge de vérification entre 59'' 59' et 00'' 01' par exemple.

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Sans être un grand expert, ni en sachant ce que font tes activités, il faut que tu lances soit un Thread, soit une tache dans ta seconde activité ce qui permettra de tourner en arrière plan et d'être indépendamment du reste pour éviter d'être bloquant. Une fois cela, tu boucles en faisant à chaque itération une vérification si l'heure est égale à celle que tu veux.


    Surtout pas, pour deux raisons:
    1) Par définition, une boucle "infine" (tant qu'une condition n'est pas remplie) est un non-pattern. On lui préfère largement le pattern: "quand la condition est remplie elle emet un évenement", et "on attend cet evement".
    2) La boucle infine va utiliser 100% du CPU (et donc 100% de la batterie), à moins d'utiliser la fonction (à bannir vraiment définitivement) de Thread.sleep....


    Le moyen le plus simple est d'utiliser un "handler":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class MonActivityFille extends Activity
    {
         private Handler waitHandler;
     
         private Runnable waitExecution = new Runnable() {
             @Override
             public void run() {
                 MonActivityFille.this.onTimeEllapsed();
             }
          }
     
         public void onCreate(...)
         {
               ...
               waitHandler = new Handler();
               waitHandler.postAtTime(waitExecution, ??? );
         }
     
         public void onTimeEllapsed() {
               finish();
         }
    }
    Si le téléphone entre en mode veille il ne sera pas reveillé, mais dès la sortie de veille, l'activité sera terminée.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Oui, pour les thread, j'utilise le Thread.sleep et un flag dans la condition qu'il suffit de mettre à false. Je ne connais pas encore de trop les handlers, mais cela ma l'air bien et je vais essayer dans profiter pour tester...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Merci pour vos réponses, je vais essayer la solution de nicroman

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Ta solution est intéressante, mais la fonction postAtTime() se base sur le temps écoulé depuis le démarrage de l'appareil. Existe-t-il une solution pour la faire se déclencher à une heure fixe ? Par exemple 18:45:00.000 ?

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Si et seulement si cela n’existe pas, tu peux calculer le temps qui reste avant d'arriver à l'heure désirée...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par John.BE Voir le message
    Si et seulement si cela n’existe pas, tu peux calculer le temps qui reste avant d'arriver à l'heure désirée...
    C'est une idée très intéressante, je la garde de côté je n'y avais pas pensé

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Sinon il existe l'AlarmManager, je ne suis pas persuadé que dans ton cas ce soit vraiment adapté (la solution du Handler.post(..., timeout) me parait mieux) mais c'est toujours bon de savoir que ça existe.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par atha2 Voir le message
    Sinon il existe l'AlarmManager, je ne suis pas persuadé que dans ton cas ce soit vraiment adapté (la solution du Handler.post(..., timeout) me parait mieux) mais c'est toujours bon de savoir que ça existe.
    C'est parti pour se documenter là dessus merci bien

  11. #11
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    L'AlarmManager a d'autres fonctions comme celle de reveiller une application alors que le téléphone est en veille.
    Là ce n'est pas le cas, d'autant que son implémentation nécessiterai un broadcastreceiver, et toute une tringlerie pour enovoyer un message à l'application ce qui reviendra à la solution des handlers.

    Mais sinon, il y a postDelayed au lieu de postAtTime.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Merci pour cette précision, je vais me documenter sur cette méthode

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Voici la solution que j'ai adopté. Elle est adapté à mon utilisation et peut être pas forcément très optimisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    private Runnable	waitExecution = new Runnable() {
    	@Override
    	public void run() {
    		Tablette.this.onTimeEllapsed();
    	}
    };
     
    public void onTimeEllapsed() {
    	finish();
    }
     
    protected void onCreate(Bundle savedInstanceState) {
    	/*
    	*....
    	*/
    	waiter = new Handler();
    	waiter.postDelayed(waitExecution, MainActivity.getMilliToHour(MainActivity.HEURE_FIN, MainActivity.MINUTE_FIN));
    	/*
    	*....
    	*/
    }
    MainActivity.getMilliToHour(int hour, int minutes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    final public static long getMilliToHour(int hour, int minute){
    	Date aujou = new Date();
    	return new Date(aujou.getYear(), aujou.getMonth(), aujou.getDay(), hour, minute).getTime()-new Date(aujou.getYear(), aujou.getMonth(), aujou.getDay(), aujou.getHours(), aujou.getMinutes()).getTime();
    }
    Dans le return de getMillitoHour, la deuxième date qui est le moment présent est construit avec un new Date(), car si l'on met directement new Date().getTime() il y a un décalage au niveau des résultats. Il y a certainement une raison que je n'ai pas trouvé encore.

    Merci encore à tous

  14. #14
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    les secondes et millisecondes ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Peut-être bien pour le seconde et les millisecondes.

    Merci pour ton retour, je vais sans doute utiliser les handlers aussi .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bouton retour à l'activité précédente
    Par anto2b dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 19/12/2011, 08h41
  2. Tâches routinières à heures fixes !
    Par wishmastah dans le forum Langage
    Réponses: 4
    Dernier message: 18/03/2006, 13h42
  3. [PROCEDURE] déclenchement d'une procédure à heure fixe
    Par Fragonard dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/08/2005, 10h03
  4. Lancer une methode a heure fixe
    Par Le Veilleur dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2004, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo