在Android中,可以使用AlarmManager来实现定时任务。AlarmManager允许我们在指定的时间触发一个操作,这个操作可以是启动一个服务、发送一个广播或者执行一个PendingIntent。下面是一个示例代码,演示如何使用AlarmManager来创建一个任务队列(PendingIntent队列):
public class TaskQueue {
private static TaskQueue instance;
private ArrayList pendingIntents;
private AlarmManager alarmManager;
private TaskQueue(Context context) {
pendingIntents = new ArrayList<>();
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
}
public static TaskQueue getInstance(Context context) {
if (instance == null) {
instance = new TaskQueue(context);
}
return instance;
}
public void addTask(long triggerAtMillis, PendingIntent pendingIntent) {
pendingIntents.add(pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
}
public void removeTask(PendingIntent pendingIntent) {
pendingIntents.remove(pendingIntent);
alarmManager.cancel(pendingIntent);
}
public void removeAllTasks() {
for (PendingIntent pendingIntent : pendingIntents) {
alarmManager.cancel(pendingIntent);
}
pendingIntents.clear();
}
}
// 创建Intent
Intent intent = new Intent(context, MyReceiver.class);
intent.setAction("com.example.ACTION_MY_TASK");
// 创建PendingIntent
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 获取任务队列实例,并添加任务
TaskQueue taskQueue = TaskQueue.getInstance(context);
taskQueue.addTask(System.currentTimeMillis() + 10000, pendingIntent); // 10秒后触发任务
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 处理任务逻辑
Toast.makeText(context, "任务触发了", Toast.LENGTH_SHORT).show();
}
}
需要注意的是,为了接收任务触发的广播,需要在AndroidManifest.xml中注册该广播接收器:
通过这种方式,我们可以动态地添加、删除和管理定时任务,实现一个任务队列(PendingIntent队列)的功能。