[JAVA] Programmation à partir de 51 ans mémorandum android Timer

Minuterie facile. Le minuteur est un thread de travail. Mais TimerTask a un comportement peu fiable, il semble donc être recommandé par Handler. Considérez également handler.postDelayed (exécutable, delayMillis)!

Le fichier à utiliser est ・ Maina c Chity ty. À plus Créer une instance de Timer Créer une instance de MyTimer Créer la méthode ScheduleAtFixedRate pour Timer

・ Mon carillon r. À plus Hériter TimerTask Créer la méthode handle.post de Handle et Runnable

MainActivity.java


public class MainActivity extends AppCompatActivity{

       @Override 
       protected void  onCreate(Bundle savedInstanceState){
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.activity_main);
       
                 Timer   timer   = new Timer();
                 MyTimer myTimer = new MyTimer(this);
                 timer.scheduleAtFixedRate(myTimer,0,10000);
       }
}

Projet-> app-> src-> main-> java->

nom de fichier MyTimer
superclass TimerTask

MyTimer.java


public class   MyTimer extends TimerTask{
       private Handler  handler;
       private Context context;
       private TIMER_STOP;

       public  MyTimer(Context context){
               handler       = new Handler();
               this.context  = context;
               TIMER_STOP    = false;
        }

       @Override 
       public void run(){
              handler.post(new Runnable(){
                   @Override 
                   public void run(){
                          Toast.makeText(context,"Toast",Toast.LENGTH_SHORT).show();
                   if(TIMER_STOP){
                      cancel();
                   }
                   }
              });
        }

        public void TimerStop(){
               TIMER_STOP = true;
        }
}

En appelant myTimer.TimerStop () depuis MyActivity.class, cancel () </ font> </ strong> sera exécuté et le minuteur s'arrêtera. Dans le processus d'arrêt de thread, il existe un processus pour arrêter le thread avec @Override public void run () { while (KEY) {todo} </ font>}, mais <font color = "#" Quand j'ai fait cela dans la partie exécution de f55 "> Timer, l'instruction while a été exécutée indéfiniment pour chaque timer </ font>. J'ai donc utilisé if () {cancel ()}!

cancel () sera traité la prochaine fois que la minuterie s'exécutera. Par exemple, timer.scheduleAtFixedRate (my) Avec une minuterie réglée sur Timer, 0,1000 * 60 * 60), cancel () est activé lorsque la prochaine tâche de minuterie est exécutée (1 heure après la pire: 1000 * 60 * 60).

Vous souhaiterez peut-être détruire le thread car vous souhaitez arrêter le traitement immédiatement. Mais c'est dangereux. Lorsque Thread s'exécute normalement, les objets protégés peuvent devenir instables en raison de la suppression de Thread, ce qui peut entraîner un comportement inattendu. Il est difficile de trouver ou d'identifier les objets qui ont été libérés de Thread, alors considérez si vous pouvez concevoir un programme avec interruption () sans abandonner Thread.

Recommended Posts