0

我有一个通过 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...

知道发生了什么以及如何避免这种情况吗?谢谢!

4

1 回答 1

0

你不能。

服务和广播接收器与活动的不同之处在于,同一时间只能有一个实例。
只有当第一个实例被销毁时,才会创建一个新实例。这就是你在第二次实验中所经历的。

于 2013-09-08T07:26:46.417 回答