Как зациклить или выполнить функцию каждые 5 секунд на Android

Как я могу зацикливать эту функцию time() в onCreate каждые 5 секунд... помогите мне, я новичок в Android =)... Я хочу выполнять функцию time() в onCreate каждые 5 секунд.

 public void onCreate(Bundle savedInstanceState) {
 time(); //<-- How can i execute this every 5 seconds.
 }

 private void time() {
new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
            int success;
         gps = new GPSTracker(AdminMenu.this);
        if(gps.canGetLocation()){
            tmplat=latitude;
            tmplong=longitude;  
           // new InsertUser1().execute();      
        }

        else{
        gps.showSettingsAlert();
        }

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("LATTTTT" + tmplat);
        System.out.println("LONGGGGGGGG" + tmplong);
    } 

}, 5000); // 5 sec

 } 

Любая помощь будет оценена...


person Chong    schedule 19.01.2016    source источник
comment
Возможный дубликат обновить пользовательский интерфейс с помощью динамического текста   -  person Knossos    schedule 19.01.2016


Ответы (5)


Вы можете использовать обработчик, данный пример будет вызывать yourfunction() каждую секунду

// Init
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        yourfunction();
        handler.postDelayed(this, 1000);
    }
};

//Start
handler.postDelayed(runnable, 1000);
person Christian Stengel    schedule 19.01.2016

Попробуйте сделать так! просто замените свой код в методе startTimer. Он должен работать..

private Timer timer;
    private TimerTask timerTask;
    private Handler handler = new Handler();

    //To stop timer
   private void stopTimer(){
        if(timer != null){
            timer.cancel();
            timer.purge();
        }
    }

    //To start timer
    private void startTimer(){
        timer = new Timer();
        timerTask = new TimerTask() {
            public void run() {
                handler.post(new Runnable() {
                    public void run(){
                        //your code is here
                    }
                });
            }
        };
        timer.schedule(timerTask, 5000, 5000);
    }
person Nik    schedule 19.01.2016
comment
спасибо чувак .. это работает .. но не могли бы вы объяснить мне, в чем польза (timerTask, 5000, 5000) я знаю, что 5000 = 5 секунд .. но почему это два 5000? какая от этого польза? - person Chong; 20.01.2016
comment
это означает расписание таймера, после первых 5000 мс TimerTask будет запускаться каждые 5000 мс. Если это полезно для вас, не забудьте проголосовать за этот ответ. - person Nik; 20.01.2016

Вот простой способ сделать это в Котлине.

private lateinit var timer: Timer
private val noDelay = 0L
private val everyFiveSeconds = 5000L

override fun onResume() {
    super.onResume()

    val timerTask = object : TimerTask() {
        override fun run() {
            runOnUiThread { /* your code here */ }
        }
    }

    timer = Timer()
    timer.schedule(timerTask, noDelay, everyFiveSeconds)
}

override fun onPause() {
    super.onPause()

    timer.cancel()
    timer.purge()
}
person Roc Boronat    schedule 03.12.2018

Вы можете использовать обработчик, поскольку оба примера будут вызывать startLooping() каждые 5 секунд.

Котлин:

        //init
        val handler = Handler()
        val runnable: Runnable = Runnable {
            startLooping()
        }
    
        private fun startLooping() {
            handler.postDelayed(runnable, 5000)
        }

        //write inside onCreate method
        handler.postDelayed(runnable,5000)

Java:

        // Init
        private Handler handler = new Handler();
        private Runnable runnable = new Runnable()
        {
            @Override
            public void run() {
                // your work
                handler.postDelayed(this, 5000);    
            }
        };

        //write inside onCreate method
        handler.postDelayed(runnable, 5000);
person Rahul    schedule 05.06.2021

person    schedule
comment
Хотя код может помочь и работать, пожалуйста, также добавьте объяснение к вашему ответу и то, как он решает проблему вопроса. - person Capricorn; 20.08.2018