如何在Android上每5秒循环或执行一个函数

10

我应该如何在onCreate函数中每间隔5秒执行一次time()函数?我是Android的新手,希望得到帮助 =) ... 我想要在onCreate中每5秒执行一次time()函数。

 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

 } 

任何帮助都将不胜感激...


1
可能是更新动态文本的UI的重复问题。 - Knossos
5个回答

20

您可以使用一个处理程序,给定的示例将每秒调用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);

10

试着这么做!只需在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);
    }

谢谢,兄弟。它起作用了。但是你能解释一下(timerTask,5000,5000)的用途吗?我知道5000等于5秒,但为什么有两个5000?那个有什么用处? - Chong
这意味着安排计时器,在前5000毫秒后,TimerTask将每5000毫秒运行一次。如果对您有帮助,请不要忘记点赞此答案。 - Nik

7
这里有一个用Kotlin实现的简单方法。
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()
}

6
 Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            if (activefragment == null)

            {
                fragmentTransaction.remove(activefragment);
            } else

            {
                fragmentTransaction.replace(R.id.fragmentContainer, activefragment, activefragment.getTag());
                fragmentTransaction.disallowAddToBackStack();
            }
            fragmentTransaction.commit();

        }
    };
    handler.postDelayed(runnable, timeout);

6
虽然代码可能有帮助并能够解决问题,但请在你的答案中添加解释以及它是如何解决问题的。请确保不改变原来的意思,使翻译更加通俗易懂。 - Capricorn

1
你可以使用一个处理程序,给定这两个示例将每5秒调用startLooping()。 Kotlin:
        //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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接