Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以相同的意图启动多个服务,但不同的requestCode使用相同的对象_Android_Android Lifecycle - Fatal编程技术网

Android 以相同的意图启动多个服务,但不同的requestCode使用相同的对象

Android 以相同的意图启动多个服务,但不同的requestCode使用相同的对象,android,android-lifecycle,Android,Android Lifecycle,我有一个通过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.

我有一个通过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); }
如果我点击按钮1,然后马上点击按钮2,我会在日志中看到相同的Id。但是如果我在两次点击之间留出更多的时间,我会得到两个不同的ID


知道发生了什么事以及如何避免吗?谢谢

你不能。

服务和广播接收器与活动的不同之处在于,同一时间只能有一个实例。

只有当第一个实例被销毁时,才会创建一个新实例。这就是你在第二次实验中的体验。

我明白了。。。我最初的目标是以特定的时间间隔在后台下载数据。每次下载都是独立的。比如:每5小时下载一次数据,每6小时下载一次数据,等等。我已经读到,安排重复任务的最佳方法是使用AlarmManager(而不是服务),这样可以在设备睡眠时执行任务。解决我的问题的一个方法是有不同的意图驱动(我猜每个数据对应一个)。但是在onHandleIntent中启动一个异步任务怎么样?这有意义吗?什么是更好的方法?谢谢。你不需要不同的服务。只需将您的数据传递给单个IntentService,它将自己按顺序处理所有请求。您的答案是正确的。关于问题的另一部分,我通过使用提供程序注入一个对象来解决它,该对象将下载不同的文件(基于传递给Intent的数据)。