Question

Je dois afficher une durée de temps sur quelques-unes de mes activités au sein de l'application. La minuterie commence lorsque l'un de l'activité commence.

  • Dois-je utiliser le service pour la minuterie?
  • Est-ce la meilleure façon?
  • Ou devrais-je commencer fil d'un de l'activité?
Était-ce utile?

La solution

Je pense que dans le cas d'utilisation que vous décrivez, il serait préférable de magasin horodatage (voir Stockage de données ) et calculate les deltas pour l'utilisation de l'interface graphique. Si vous avez besoin d'afficher une horloge en temps réel dans l'une de vos activités, vous pouvez créer un thread séparé dans cette activité juste pour mettre à jour l'horloge.

Autres conseils

Eh bien, selon la façon dont le travail bien l'interface dont vous avez besoin pour afficher vos progrès, je commencerais un thread dans l'activité, puis créer une minuterie qui vérifie l'état de l'avancement du fil et met à jour l'interface selon les besoins. Les services sont bons pour les tâches de fond qui ne nécessitent pas beaucoup de notification d'interface / mises à jour.

Voici un exemple d'un projet sur lequel je travaille actuellement sur (UpdateListRunnable appelle simplement « notifyDataSetChanged () » sur mon adaptateur liste. Je fais plusieurs fois dans le code, donc j'encapsulé dans une classe. En outre, updateHandler est juste une instance régulière Handler):

@Override
public void run() {
    Timer updateProgressTimer = null;
    UpdateItem currentItem = null;

    for(int i = 0; i < items.size(); i++) {
        currentItemIndex = i;
        currentItem = items.get(i);

        if (currentItem.isSelected() == true) {
            updateProgressTimer = new Timer();

            updateProgressTimer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    updateHandler.post(new UpdateListRunnable());
                }
            }, 0, 2000); // check every 2 seconds

            lookupDb.downloadUpdate(currentItem);

            currentItem.setUpToDate(true);
            currentItem.setStatusCode(UpdateItem.UP_TO_DATE);
            currentItem.setProgress(0);
            updateProgressTimer.cancel();

            updateHandler.post(new UpdateListRunnable());
        } // end if its the database we are hosting on our internal server
    } // end for loop through update items

    currentItemIndex = -1;
} // end updateThread run
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top