Java 在安卓系统中,如何在固定时间后重复任务?

Java 在安卓系统中,如何在固定时间后重复任务?,java,android,Java,Android,我希望每5秒重复调用一个方法,每当我希望停止重复调用该方法时,我可以停止或重新启动该方法的重复调用 下面是一些我真正想要实现的示例代码。请在这方面帮助我,我将非常感谢你 private int m_interval = 5000; // 5 seconds by default, can be changed later private Handler m_handler; @Override protected void onCreate(Bundle bundle) { ... m

我希望每5秒重复调用一个方法,每当我希望停止重复调用该方法时,我可以停止或重新启动该方法的重复调用

下面是一些我真正想要实现的示例代码。请在这方面帮助我,我将非常感谢你

private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handler m_handler;

@Override
protected void onCreate(Bundle bundle)
{
  ...
  m_handler = new Handler();
}

Runnable m_statusChecker = new Runnable()
{
     @Override 
     public void run() {
          updateStatus(); //this function can change value of m_interval.
          m_handler.postDelayed(m_statusChecker, m_interval);
     }
};

public void startRepeatingTask()
{
    m_statusChecker.run(); 
}

public void stopRepeatingTask()
{
    m_handler.removeCallbacks(m_statusChecker);
}  

使用以下命令设置重复任务:

//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        //Called each time when 1000 milliseconds (1 second) (the period parameter)
    }

},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
1000);
如果您想取消任务,只需调用
t.cancel()
这里
t
是您的
计时器
对象


您还可以查看答案下方的评论,他们已经提供了有关该问题的简要信息。

使用TimerTask在特定时间间隔后拨打电话

    Timer timer = new Timer();
    timer.schedule(new UpdateTimeTask(),1, TimeInterval);

onCreate()
方法中使用。它的
postDelayed()
方法导致将
Runnable
添加到消息队列中,并在指定的时间段后运行(在给定示例中为0)。然后,这将在固定的时间速率(在本例中为1000毫秒)后排队

请参阅此代码:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    android.os.Handler customHandler = new android.os.Handler();
    customHandler.postDelayed(updateTimerThread, 0);
}

private Runnable updateTimerThread = new Runnable()
{
    public void run()
    {
        //write here whaterver you want to repeat
        customHandler.postDelayed(this, 1000);
    }
};

在Android的帮助下以Android的方式进行

声明一个处理程序

初始化活动/片段中的处理程序对象

//Task Handler
private Handler taskHandler = new NonLeakyHandler(FlashActivity.this);
在固定时间间隔后重复任务

taskHandler.postDelayed(RepeativeTaskRunnable,DELAY_MILLIS)

停止重复

taskHandler.removeCallbacks(RepeativeTaskRunnable)


您必须每5秒将此代码放入要调用的活动中

final Runnable tarea = new Runnable() {   public void run() {
hola_mundo();//the operation that you want to perform }}; 
ScheduledExecutorService timer = Executors.newSingleThreadScheduledExecutor();
timer.scheduleAtFixedRate(tarea, 5, 5, TimeUnit.SECONDS);

试试这个,我认为它很容易使用倒计时。在第一次迭代后,我得到了“从错误的线程异常调用”的指导。对于Android,处理器比计时器更可取:假设我的计划时间是每10分钟一次,我的手机进入打盹模式或理想模式,或者我锁定了设备。处理程序在10分钟后还会调用我的方法吗?目前,它不起作用。仅当我的应用程序恢复时,才会调用处理程序。@Sniper如果我的计划时间是每10分钟一次,并且我的手机进入睡眠模式或理想模式,或者我锁定了设备,则当应用程序未运行时,您需要使用Alarm Manager来调用该功能。处理程序在10分钟后还会调用我的方法吗?目前,它不起作用。仅在应用程序恢复时调用处理程序
   private Runnable repeatativeTaskRunnable = new Runnable() {
        public void run() {
            new Handler(getMainLooper()).post(new Runnable() {
                @Override
                public void run() {

         //DO YOUR THINGS
        }
    };
//Task Handler
private Handler taskHandler = new NonLeakyHandler(FlashActivity.this);
final Runnable tarea = new Runnable() {   public void run() {
hola_mundo();//the operation that you want to perform }}; 
ScheduledExecutorService timer = Executors.newSingleThreadScheduledExecutor();
timer.scheduleAtFixedRate(tarea, 5, 5, TimeUnit.SECONDS);