2011-04-20 3 views
0

J'ai une application qui doit mettre à jour une notification d'événement permanent. La notification a une barre de progression que j'ai besoin d'incrémenter toutes les 5 minutes. J'utilise Handlers mais quelque chose à ce sujet me dérange ou je ne comprends tout simplement pas comment ils fonctionnent.Question du gestionnaire Android

 if (progress<=24) 
      { 

    contentView.setProgressBar(R.id.status_progress,24,progress,false); 
    Toast.makeText(getApplicationContext(),progress, Toast.LENGTH_SHORT).show(); 
    progress++; 
    mnNotificationManager.notify(IS_PARKED_ID, notification); 
    mHandler.postDelayed(mUpdateTimeTaskProgressbar, 300000); 

      } 

Voici le code. Il semble que lorsque l'écran de l'appareil est éteint, la notification n'est pas mise à jour. J'ai utilisé des gestionnaires dans le passé, mais comme je me souviens, je les ai mis à jour tous les 100 milisec. Ma question est donc la suivante: le gestionnaire est-il en pause, s'arrête et redémarre-t-il ou est-ce autre chose? Et avez-vous une suggestion comme wake_lock. Merci à l'avance, Simon
EDIT: oublié de mentionner tout cela est en cours d'exécution d'un service

Répondre

1

De temps en temps, les pistes gc pour libérer de la mémoire sur votre appareil. Si elle s'exécute à partir du thread de l'interface utilisateur, le programme de mise à jour de votre notification peut également être collecté.

J'utilise un service pour afficher les notifications en cours, de cette façon je peux être sûr que ni le service ni la notification ne sont arrêtés/collectés.

La communication entre mes activités et le service que j'ai résolu avec les gestionnaires, mais il y a beaucoup de techniques pour cela aussi.

+0

Il fonctionne à partir d'un service, oublié de mentionner. La chose est que cela arrive tout le temps, pas juste un certain temps. Au cours des deux jours où j'ai testé cela, c'est le cas. Je pense à résoudre cela en utilisant une minuterie. – Simon

+0

Si la période de 5 minutes est un horaire à taux fixe, vous pouvez utiliser la minuterie et, à l'intérieur de la méthode d'exécution du tas, vous pouvez rassembler les données nécessaires à la mise à jour. Après cela, vous pouvez appeler votre gestionnaire pour mettre à jour la barre de progression. – rekaszeru

+0

Il est réparé donc je suppose que je vais utiliser Timer. Merci pour l'aide – Simon

0

Par défaut, le gestionnaire s'exécute dans le même processus que le thread de l'interface utilisateur. Je pense donc que vous devriez utiliser un service pour mettre à jour la barre de progression. Dans ce cas, vous souhaitez mettre à jour l'interface utilisateur toutes les 5 minutes. Vous pouvez utiliser AlarmManager pour démarrer un service d'alarme pour y parvenir.

+0

Il fonctionne à partir d'un service, mais vous ne pensez pas que l'utilisation d'AlarmManager est exagérée, parce que je dois alors faire face à des diffusions. – Simon