J'ai l'intention de créer une application d'intervalle à l'aide de minuteries. Ce devrait être le plus basique. Je vais donc devoir en ajouter un peu plus après avoir compris les bases. Ce que je veux réaliser, c'est sélectionner le nombre de minutes qu'un intervalle devrait durer, mais combien de fois cet intervalle devrait durer. Comme un intervalle qui dure 1 minute et dure 8 fois. La question est quelle est la meilleure minuterie à utiliser? Je me suis essayé sur le Android Compte à rebours et cela semble fonctionner. Mais y en a-t-il un autre qui est mieux?
Je recommanderais toujours d'utiliser un Handler
.
C'est un peu plus de travail que les classes intégrées, mais je trouve qu'il est beaucoup plus efficace et que vous avez plus de contrôle sur lui.
Le gestionnaire est une classe qui gérera l'exécution de code sur un Looper
/Thread
par défaut, le thread dans lequel il est créé, sinon vous pouvez spécifier où le gestionnaire exécute son code en passant le Looper
au constructeur Handler
comme - new Handler(Looper.getMainLooper());
La raison pour laquelle je recommanderais le looper est parce que vous avez une plus grande flexibilité de contrôle, car c'est une abstraction légèrement plus basse que les méthodes TimerTask
.
Généralement, ils sont très utiles pour exécuter du code sur des threads. Par exemple. utile pour canaliser les données sur les threads.
Les deux utilisations principales sont:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final Handler h = new Handler();
h.postDelayed(new Runnable()
{
private long time = 0;
@Override
public void run()
{
// do stuff then
// can call h again after work!
time += 1000;
Log.d("TimerExample", "Going for... " + time);
h.postDelayed(this, 1000);
}
}, 1000); // 1 second delay (takes millis)
}
Utilisation simple!
Ou vous pouvez utiliser des messages, ce qui réduit la création d'objets. Si vous songez à une mise à jour rapide de l'interface utilisateur, etc., cela réduira la pression sur le garbage collector.
class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyTimers timer = new MyTimers();
timer.sendEmptyMessage(MyTimers.TIMER_1);
timer.sendEmptyMessage(MyTimers.TIMER_2);
}
public static class MyTimers extends Handler
{
public static final int TIMER_1 = 0;
public static final int TIMER_2 = 1;
@Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
case TIMER_1:
// Do something etc.
Log.d("TimerExample", "Timer 1");
sendEmptyMessageDelayed(TIMER_1, 1000);
break;
case TIMER_2:
// Do another time update etc..
Log.d("TimerExample", "Timer 2");
sendEmptyMessageDelayed(TIMER_2, 1000);
break;
default:
removeMessages(TIMER_1);
removeMessages(TIMER_2);
break;
}
}
}
}
Évidemment, c'est pas une implémentation complète mais cela devrait vous donner une longueur d'avance.