我有一个通过 AlarmManager 安排服务的对象,如下所示:
public void schedule(MyEnum enum) {
Intent intent = new Intent(context, MyService.class);
intent.setAction(enum.name());
Bundle args = new Bundle();
args.putSerializable("MyEnum", content);
intent.putExtra("Bundle", args);
PendingIntent pendingIntent = PendingIntent.getService(context, enum.ordinal(),
intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, 0, pendingIntent);
}
服务:
public class MyService extends IntentService {
@Override
public void onHandleIntent(Intent intent) {
Log.d("this: " + this);
}
}
我启动调度程序的方式:
scheduler.schedule(MyEnum.ONE);
scheduler.schedule(MyEnum.TWO);
我在日志中看到的内容:
MyService@41ea7858
MyService@41ea7858
我尝试使用广播接收器,我也使用了标志,但结果相同。然后我尝试了类似的方法:
button1.setOnClickListener() { scheduler.scheduler(MyEnum.ONE); }
button2.setOnClickListener() { scheduler.scheduler(MyEnum.TWO); }
如果我立即点击 button1 然后 button2,我会在日志中看到相同的 ID。但是,如果我在点击之间留出更多时间,我会得到两个不同的 ID...
知道发生了什么以及如何避免这种情况吗?谢谢!