Android - 如何每分钟运行一段代码(与设备时间同步)

时间:2016-10-21 10:44:15

标签: java android

我正在开发一个Android应用程序,我需要每分钟运行一段代码,当我说每分钟我的意思是它应该与设备的时间同步,所以每次设备时间改变一分钟我的代码是执行。

到目前为止,我尝试了这个,但它无效:

runnable=new Runnable(){
@Override
public void run(){

    long now=SystemClock.uptimeMillis();
    long next=now+(60000 - now % 60000);
    handler.postAtTime(this, next);

   }
 };
 runnable.run();

5 个答案:

答案 0 :(得分:7)

还有很多其他方法可以做到这一点:

1)Timer.scheduleAtFixedRate()

2)Thread.sleep(间隔)

3)警报管理器

以你的方式看起来像这样:

ERROR: no such package 'tensorflow/tensorflow/examples/android': BUILD file not found on package path.

您可以看到此fillna了解详情

答案 1 :(得分:3)

您可以使用此代码:

Thread thread = new Thread(new Runnable()
        {
            int lastMinute;
            int currentMinute;
            @Override
            public void run()
            {
                lastMinute = currentMinute;
                while (true)
                {
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTimeInMillis(System.currentTimeMillis());
                    currentMinute = calendar.get(Calendar.MINUTE);
                    if (currentMinute != lastMinute){
                        lastMinute = currentMinute;
                        Log.v("LOG", "your code here");
                    }
                }
            }
        });
        thread.run();

答案 2 :(得分:1)

可以使用句柄,并且可以以毫秒为单位输入,我们可以每分钟调用一次代码,并且在使用两种不同的布局时不应使用任何无限循环

         final Handler handler = new Handler(); 
        Runnable run = new Runnable() {
        @Override
        public void run() {

            handler.postDelayed(this, 60000);
        }
    };
    handler.post(run);

答案 3 :(得分:0)

如果您想每隔X秒启动一次,就可以使用处理程序。处理程序很好,因为您在触发事件时不需要额外的线程来跟踪。这是一个代码:

private final static int INTERVAL = 1000 * 60 * 1; //1 minutes
Handler mHandler = new Handler();

Runnable mHandlerTask = new Runnable()
{
     @Override 
     public void run() {
          doSomething();
          mHandler.postDelayed(mHandlerTask, INTERVAL);
     }
};

void startRepeatingTask()
{
    mHandlerTask.run(); 
}

void stopRepeatingTask()
{
    mHandler.removeCallbacks(mHandlerTask);
}

答案 4 :(得分:-1)

现代方法

new Handler().postDelayed(() -> {

            }, 30000);