我有一个通过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
我尝试使用BroadcastReceiver,我也玩过旗帜,但结果相同。 然后我尝试了类似的东西:
button1.setOnClickListener() { scheduler.scheduler(MyEnum.ONE); }
button2.setOnClickListener() { scheduler.scheduler(MyEnum.TWO); }
如果我立即点击button1然后点击button2,我会在日志中看到相同的ID。但如果我在点击之间留出更多时间,我会得到两个不同的ID ...
知道发生了什么以及如何避免这种情况?谢谢!
答案 0 :(得分:0)
你不能。
服务和BroadcastReceivers与活动的不同之处在于,同时只能有一个实例。
仅当第一个实例被销毁时,才会创建一个新实例。这就是你第二次实验所经历的。