如何在android活动中每分钟运行一次代码?

时间:2014-03-09 18:13:30

标签: java android timer

在我的android项目中,我有一个需要每分钟运行一次代码的活动。我怎样才能做到这一点?代码需要在活动运行时每分钟运行而不是暂停(即用户看到它而不是其他活动)。此外,它应该在应用程序最小化时运行。

当活动结束时,代码应该停止运行。

有没有人知道这个代码?

由于

2 个答案:

答案 0 :(得分:6)

您可以在活动中注册android.intent.action.TIME_TICK广播

private BroadcastReceiver receiver;

@Overrride
public void onCreate(Bundle savedInstanceState){


  IntentFilter filter = new IntentFilter();
  filter.addAction("android.intent.action.TIME_TICK");

  receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      // TODO : codes runs every minutes
    }
  }
     registerReceiver(receiver, filter);
}

@Override
protected void onDestroy() {
  super.onDestroy();
  unregisterReceiver(receiver);
}
  

广播行动:当前时间已经改变。每分钟发送一次。只有通过使用Context.registerReceiver()显式注册它,才能通过清单中声明的​​组件来接收它。

     

这是受保护的意图,只能由系统发送。

     

常量值:“android.intent.action.TIME_TICK”

REFERENCE

<强>已更新
正如Joakim在评论中提到的,因为你想在活动停止运行时停止代码,你可以在onResume中注册接收器并在onPause中取消注册

@Override
protected void onPause() {
  super.onPause();
  unregisterReceiver(receiver);
}

@Overrride
public void onResume(){
  super.onResume();
  registerReceiver(receiver, filter);
}

答案 1 :(得分:1)

在onResume中,您可以启动一个执行代码的线程。 然后睡一分钟。 在onPause中,您可以停止此线程(将run设置为false)。

这样的事情:

private class myThread extends Thread{
    private boolean run = true;

    public void run(){
        while(run){
            do code
            Thread.sleep(1000l * 60) // one minute
        }
     }
}