我正在开发一个Android2.3.3应用程序,我需要每隔X秒运行一次方法。
在iOS上,我用的是NSTimer,但在安卓上我不知道该用什么。
有人推荐我使用Handler;也有人推荐我使用AlarmManager,但我不知道哪种方法更适合NSTimer。
这是我想在Android中实现的代码:
timer2 = [
NSTimer scheduledTimerWithTimeInterval:(1.0f/20.0f)
target:self
selector:@selector(loopTask)
userInfo:nil
repeats:YES
];
timer1 = [
NSTimer scheduledTimerWithTimeInterval:(1.0f/4.0f)
target:self
selector:@selector(isFree)
userInfo:nil
repeats:YES
];
我需要像NSTimer那样工作的东西。
你给我推荐什么?
发布于 2012-07-11 21:49:44
您将使用的解决方案实际上取决于每次执行函数之间需要等待多长时间。
如果您等待的时间超过10分钟,我建议您使用AlarmManager
。
// Some time when you want to run
Date when = new Date(System.currentTimeMillis());
try {
Intent someIntent = new Intent(someContext, MyReceiver.class); // intent to be launched
// Note: this could be getActivity if you want to launch an activity
PendingIntent pendingIntent = PendingIntent.getBroadcast(
context,
0, // id (optional)
someIntent, // intent to launch
PendingIntent.FLAG_CANCEL_CURRENT // PendingIntent flag
);
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE
);
alarms.setRepeating(
AlarmManager.RTC_WAKEUP,
when.getTime(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES,
pendingIntent
);
} catch(Exception e) {
e.printStackTrace();
}
一旦你广播了上面的Intent
,你就可以通过实现一个BroadcastReceiver
来接收你的Intent
。请注意,这将需要在应用程序清单中或通过context.registerReceiver(receiver, intentFilter);
方法注册。For more information on BroadcastReceiver
's please refer to the official documentation.。
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("MyReceiver: here!") // Do your work here
}
}
如果您等待的时间少于10分钟,那么我建议您使用Handler
。
final Handler handler = new Handler();
final int delay = 1000; // 1000 milliseconds == 1 second
handler.postDelayed(new Runnable() {
public void run() {
System.out.println("myHandler: here!"); // Do your work here
handler.postDelayed(this, delay);
}
}, delay);
发布于 2012-07-11 21:48:44
使用计时器计时每一秒。
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//your method
}
}, 0, 1000);//put here time 1000 milliseconds=1 second
发布于 2016-10-15 18:40:40
您可以尝试使用此代码通过onResume()每隔15秒调用一次处理程序,并通过onPause()在活动不可见时停止它。
Handler handler = new Handler();
Runnable runnable;
int delay = 15*1000; //Delay for 15 seconds. One second = 1000 milliseconds.
@Override
protected void onResume() {
//start handler as activity become visible
handler.postDelayed( runnable = new Runnable() {
public void run() {
//do something
handler.postDelayed(runnable, delay);
}
}, delay);
super.onResume();
}
// If onPause() is not included the threads will double up when you
// reload the activity
@Override
protected void onPause() {
handler.removeCallbacks(runnable); //stop handler when activity not visible
super.onPause();
}
https://stackoverflow.com/questions/11434056
复制相似问题