在Android中有一些处理刷新的选项,比如定时器(Timer)、定时任务(TimerTask)、ScheduledExecutorService、AlarmManager和Handler。哪种方法最好呢?
有人检查过上述方法的资源利用率吗?我在这里列出了上述方法的实现。
使用Handler重复执行任务。
使用Timer和TimerTask重复执行任务
在IT技术中,我们常常需要定期或定时地执行某项任务。为了实现这一目的,Java提供了一个方便的工具——Timer和TimerTask。
Timer是一个用于调度任务的类,可以安排在指定时间执行某项操作。它通常与TimerTask配合使用,TimerTask则表示要执行的具体任务。
通过Timer和TimerTask,我们可以轻松地实现对某个任务的重复执行。例如,我们可以设置每隔一段时间执行一次某项操作,或者每天、每周等固定时间点执行一次某项操作。
总之,使用Timer和TimerTask可以让我们更加方便地进行任务调度,提高工作效率。
有人检查过上述方法的资源利用率吗?我在这里列出了上述方法的实现。
使用Handler重复执行任务。
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, TimeInterval);
使用计时器重复执行任务
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
new MyScheduledTask.execute(param);
}
}}, 10000, 10000);
使用ScheduledExecutorService重复执行任务
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
new MyScheduledTask.execute(param);
}
}, 0, 10, TimeInterval);
使用Timer和TimerTask重复执行任务
在IT技术中,我们常常需要定期或定时地执行某项任务。为了实现这一目的,Java提供了一个方便的工具——Timer和TimerTask。
Timer是一个用于调度任务的类,可以安排在指定时间执行某项操作。它通常与TimerTask配合使用,TimerTask则表示要执行的具体任务。
通过Timer和TimerTask,我们可以轻松地实现对某个任务的重复执行。例如,我们可以设置每隔一段时间执行一次某项操作,或者每天、每周等固定时间点执行一次某项操作。
总之,使用Timer和TimerTask可以让我们更加方便地进行任务调度,提高工作效率。
Timer timer = new Timer();
timer.schedule(new UpdateTimeTask(),1, TimeInterval);
class UpdateTimeTask extends TimerTask {
public void run()
{
new MyScheduledTask.execute(param);
}
}
AlarmManager用于执行预定任务
public void setupTask(){
// check task is scheduled or not
boolean alarmUp = (PendingIntent.getBroadcast(this, 0,
new Intent("YourPackageHere.AlarmReceiver"),
PendingIntent.FLAG_NO_CREATE) != null);
if ( !alarmUp) {
Intent intent = new Intent("YourPackageHere.AlarmReceiver");
intent.putExtra("activate", true);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
AlarmManager alarmManager =
(AlarmManager)
this.getSystemService(this.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
pendingIntent);
calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
alarmManager = (AlarmManager)
this.getSystemService(this.ALARM_SERVICE);
PendingIntent pendingIntent2 =
PendingIntent.getBroadcast(this, 1,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent2);
}
}
AlarmManager类
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.hasExtra("activate")) {
new MyScheduledTask.execute(param);
}
}
}
清单
<receiver android:name="YourPackageHere.AlarmReceiver"></receiver>
MQTT
。当然,这需要服务器端配置。 - Lawrence Choy