Я должен отображать некоторые данные каждые 10 секунд. Кто-нибудь может сказать мне, как это сделать?
отображать данные каждые 10 секунд в Android
Ответы (6)
Существует еще один способ, который вы можете использовать для обновления пользовательского интерфейса через определенный интервал времени. Вышеуказанные два варианта являются правильными, но в зависимости от ситуации вы можете использовать альтернативные способы обновления пользовательского интерфейса через определенный интервал времени.
Сначала объявите одну глобальную переменную для обработчика, чтобы обновить элемент управления пользовательского интерфейса из потока, как показано ниже.
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();
mHandler
следует изменить на final
.
- person Mandrake; 31.05.2015
Вероятно, самое простое, что можно сделать, это:
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);
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
- person lxknvlk; 22.03.2015
Andrahu был на правильном пути с определением обработчика. Если у вас есть обработчик, который вызывает ваши функции обновления, вы можете просто задержать сообщение, отправленное обработчику, на 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 секунд. Вы можете просто отправить еще одно сообщение в своей функции обновления, в результате чего весь цикл будет выполняться снова и снова.
Существует также другой способ с помощью обработчика
final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Display Data here
}
}, intervalTime);
Существует простой способ отображать некоторые данные каждые 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 секунд автоматически обновляется экран вашего приложения или обновляется активность.
создать внутри метода 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();