Это может помочь кому-то, если я попробовал несколько вышеперечисленных решений, прежде чем придумать свой собственный, который действительно работал для меня (другие не сделали этого)
var sequence;
objects.forEach(function(item) {
if(sequence === undefined){
sequence = doSomethingThatReturnsAPromise(item)
}else{
sequence = sequence.then(function(){
return doSomethingThatReturnsAPromise(item)
});
}
});
Вероятно, самое простое, что можно сделать, это:
while(needToDisplayData)
{
displayData(); // display the data
Thread.sleep(10000); // sleep for 10 seconds
}
Также вы можете использовать таймер:
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);
Существует также другой способ, который вы можете использовать для обновления пользовательского интерфейса через определенный промежуток времени. Вышеуказанные два варианта являются правильными, но в зависимости от ситуации вы можете использовать альтернативные способы обновления пользовательского интерфейса в определенный промежуток времени.
Сначала объявите один глобальный varialbe для Handler, чтобы обновить элемент управления пользовательского интерфейса из Thread, как показано ниже
Handler mHandler = new Handler();
Теперь создайте один поток и используйте цикл while для периодического выполнения задачи с использованием метода ожидания потока.
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();
Существует также еще один способ с помощью обработчика
final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Display Data here
}
}, intervalTime);
. Метод создания внутри onCreate (), который я пробовал, этот код будет работать для меня
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();
Существует простой способ отображения некоторых данных через каждые 10 секунд.
@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();
}
Андраху был на правильном пути с определением обработчика. Если у вас есть обработчик, который вызывает ваши функции обновления, вы можете просто задержать сообщение , отправленное обработчику, на 10 секунд.
Таким образом, вам не нужно запускать собственный поток или что-то подобное, что приведет к странным ошибкам, проблемам отладки и обслуживания.
Просто позвоните:
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);
Теперь ваша функция handleMessage будет вызываться через 10 секунд. Вы можете просто отправить другое сообщение в вашей функции обновления, заставляя весь цикл повторяться снова и снова