在我的android项目中,我有一个需要每分钟运行一次代码的活动。我怎样才能做到这一点?代码需要在活动运行时每分钟运行而不是暂停(即用户看到它而不是其他活动)。此外,它应该在应用程序最小化时运行。
当活动结束时,代码应该停止运行。
有没有人知道这个代码?
由于
答案 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”
<强>已更新强>
正如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
}
}
}