отображать данные каждые 10 секунд в Android

Я должен отображать некоторые данные каждые 10 секунд. Кто-нибудь может сказать мне, как это сделать?


person Farha Ansari    schedule 29.03.2010    source источник
comment
@Farha, я надеюсь, что мой ответ был полезен.   -  person Kiril    schedule 30.03.2010


Ответы (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();
person Rahul Patel    schedule 29.03.2010
comment
Нельзя ссылаться на неконечную переменную mHandler внутри внутреннего класса, определенного в другом методе. - person Francisco Corrales Morales; 21.11.2014
comment
Модификатор 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); 
person Kiril    schedule 29.03.2010
comment
Lirik, ваше первое решение выдало бы ANR, это определенно нецелесообразно. И было бы лучше, если бы вы упомянули, будет ли timer.scheduleAtFixedRate создавать новый поток для выполнения задачи или использовать тот же поток, в котором он был вызван. - person tony9099; 19.09.2013
comment
первый замораживает пользовательский интерфейс, второй выдает ex: 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 секунд. Вы можете просто отправить еще одно сообщение в своей функции обновления, в результате чего весь цикл будет выполняться снова и снова.

person Janusz    schedule 29.03.2010

Существует также другой способ с помощью обработчика

final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable()  {   
 @Override
 public void run() {
    //Display Data here
   }
 }, intervalTime);
person Sunil kumar    schedule 07.03.2014

Существует простой способ отображать некоторые данные каждые 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();
}   
person Sunil kumar    schedule 07.03.2014

Каждые 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();
person Satheeshkumar Somu    schedule 30.12.2015
comment
это неправильный способ, проверьте мой ответ здесь, ваш поток пользовательского интерфейса ждет, и поэтому могут быть шансы, что ваше приложение перейдет в режим «не отвечает». - person Yogesh Rathi; 16.04.2016
comment
я хочу автоматически повторно вызывать URL-адрес и метод или что-то еще, как я могу это сделать - person Satheeshkumar Somu; 03.03.2017