Je dois afficher des données toutes les 10 secondes. Quelqu'un peut-il me dire comment faire cela?
Il existe un autre moyen que vous pouvez utiliser pour mettre à jour l'interface utilisateur sur un intervalle de temps spécifique. Les deux options ci-dessus sont correctes, mais cela dépend de la situation. Vous pouvez utiliser d'autres méthodes pour mettre à jour l'interface utilisateur sur un intervalle de temps spécifique.
Commencez par déclarer une variable globale pour que Handler mette à jour le contrôle d'interface utilisateur à partir de Thread, comme ci-dessous.
Handler mHandler = new Handler();
Créez maintenant un thread et utilisez la boucle while pour effectuer la tâche périodiquement en utilisant la méthode de veille du thread.
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// Write your code here to update the UI.
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
}).start();
La chose la plus simple à faire est probablement la suivante:
while(needToDisplayData)
{
displayData(); // display the data
Thread.sleep(10000); // sleep for 10 seconds
}
Alternativement, vous pouvez utiliser une minuterie:
int delay = 1000; // delay for 1 sec.
int period = 10000; // repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
displayData(); // display the data
}
}, delay, period);
Il y a aussi une autre manière en utilisant Handler
final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Display Data here
}
}, intervalTime);
Andrahu était sur la bonne voie en définissant un gestionnaire. Si un gestionnaire appelle vos fonctions de mise à jour, vous pouvez simplement retarder le message envoyé au gestionnaire pendant 10 secondes.
De cette façon, vous n'avez pas besoin de démarrer votre propre thread ou quelque chose du genre qui conduirait à des erreurs étranges, des problèmes de débogage et de maintenance.
Il suffit d'appeler:
Handler myHandler = new MyUpdateHandler(GUI to refresh); <- You need to define a own handler that simply calls a update function on your gui.
myHandler.sendMessageDelayed(message, 10000);
Maintenant, votre fonction handleMessage sera appelée après 10 secondes. Vous pouvez simplement envoyer un autre message dans votre fonction de mise à jour, ce qui provoque le cycle complet de s'exécuter encore et encore.
Il existe un moyen simple d'afficher des données toutes les 10 secondes.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
ActionStartsHere();
}
public void ActionStartsHere() {
againStartGPSAndSendFile();
}
public void againStartGPSAndSendFile() {
new CountDownTimer(11000,10000) {
@Override
public void onTick(long millisUntilFinished) {
// Display Data by Every Ten Second
}
@Override
public void onFinish() {
ActionStartsHere();
}
}.start();
}
créer à l'intérieur de la méthode onCreate () j'ai essayé ce code fonctionnera pour moi
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
//CALL ANY METHOD OR ANY URL OR FUNCTION or any view
}
});
}
} catch (InterruptedException e) {
}
}
};t.start();