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 :

Répéter une tâche récurrente


Sujet :

Android

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut Répéter une tâche récurrente
    Bonjour,

    J'aimerais que mon activité principale m'exécute une méthode régulièrement, genre toutes les heures, quand l'appli est en marche. Mais je ne sais pas comment faire. J'ai trouvé plusieurs solutions sur le net, mais qui ne fonctionnent pas chez moi, comme celle-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
     
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
      public void run() {
                      Toast.makeText(MainActivity.this, getString(R.string.hello), Toast.LENGTH_SHORT).show();  
               }
      }, 0, 2, TimeUnit.MINUTES);
    Ou se trouve le problème ?

  2. #2
    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
    Reste à savoir ce que tu veux faire exactement...

    [FONT=Verdana, sans-serif]activité principale m'exécute une méthode régulièrement, genre toutes les heures
    [/FONT]
    [FONT=Verdana, sans-serif]M'a l'air impossible.[/FONT]
    [FONT=Verdana, sans-serif]Par définition la durée de vie d'une activité peut être assez courte. Donc l'exécution d'une méthode de l'activité toutes les heures est impossible.[/FONT]

    [FONT=Verdana, sans-serif]Ou on veut rafraîchir une donnée de l'activité toutes les minutes par exemple, alors on passe par le handler de l'activité (ou un handler créé pour l'occasion), avec la fonction postDelayed.
    [/FONT]

    Ou alors, on veut qu'une méthode de l'application (et non de l'activité), en bref, une méthode statique soit appelée toutes les heures.
    Là encore il y a plusieurs choix:
    * Veut-on que cet appel soit à heure précise et soit toujours effectué (même téléphone en veille) ?
    * Veut-on que cet appel soit à peu-prêt toutes les heures (si le téléphone est en veille il sera fait pendant les courts moments de sortie de veille) ?

    Dans les deux cas, il faut passer par un AlarmManager.

    Attention, un "reboot" détruit les "alarmes" (qui n'ont rien à voir avec celles de l'application "Alarmes" bien entendu), il faut donc les sauvegarder, et les re-créer après le boot du téléphone.
    https://developer.android.com/traini...ng/alarms.html
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    J'avais aussi vu un tuto sur l'AlarmManager, mais ca ne correspondait pas à mon besoin qui est bien plus simple.

    Dans mon appli, je n'ai qu'une seule activité car tous le reste n'est que fragment.
    Je vais mettre des bannières de pub qui disparaîtront pendant un certain temps après un clic dessus. Mon but est que l'activité contrôle régulièrement le temps depuis le dernier clic, et refait apparaître la pub si besoin. J'ai déjà la méthode pour ca dans laquelle j'enregistre l'heure du clic dans une SharedPreference. Seulement, cette méthode est appelée une fois dans le createView de l'activité et c'est tout. L'idée, est qu'elle puisse être appelée de nouveau plus tard sans avoir besoin de relancer l'appli.

  4. #4
    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
    Oui ben dans ce cas c'est bien un handler dont-il s'agit....

    MyActivity

    onCreate:
    * this.handler = new Handler();
    * this.nextBannerShowTime = Lecture depuis les SharedPreferences
    * scheduleBanner();

    displayBanner()
    * Affichage de la banière

    hideBanner()
    * Suppression de la banière

    scheduleBanner()
    * Date now = new Date();
    * if (this.nextBannerShowTime == null || this.nextBannerShowTime.before(now)) displayBanner();
    * else this.handler.postDelayed(new Runnable() { MyActivity.this.displayBanner(); }, this.nextShowTime.getTime() - now.getTime());

    onClickBanner()
    * hideBanner();
    * this.nextShowTime = new Date(System.currentTimeMillis() + 3600000);
    * SharedPreferences.Editor <= stockage de this.nextShowTime
    * scheduleBanner();
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    Merci, je vais suivre ton idée et y regarder de plus près.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    C'est bon, ca marche comme prévu, merci.

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

Discussions similaires

  1. [XSLT 1.0] répéter une tâche - repeat
    Par djibril dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 13/09/2011, 13h20
  2. Réponses: 2
    Dernier message: 11/05/2009, 18h31
  3. Comment récupérer l'ID d'une tâche programmée avec AT ?
    Par langela94 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 11h01
  4. Ne pas répéter une image de fond
    Par valette dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 05/01/2005, 21h49

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