【问题标题】:android how many intent service can run in parallelandroid可以并行运行多少个intent服务
【发布时间】:2016-11-29 11:39:48
【问题描述】:
我有多个 IntentService 子类。谁能告诉我有多少这样的意图服务可以并行运行。谢谢
【问题讨论】:
标签:
android
intentservice
【解决方案1】:
IntentService 如果来自同一类,则不会并行运行。它们将按顺序运行。换句话说,如果您有一个名为 DownloadService 的 IntentService 从给定的 URL 下载文件,那么您可以像这样运行它:
List<String> downloadUrls = getDownloadUrls();
Context ctx = getContext();
Intent baseIntent = new Intent(ctx, DownloadService.class);
for(String url : downloadUrls) {
Intent downloadService = new Intent(baseIntent);
downloadService.putString("downloadUrl", url);
ctx.startService(downloadService);
}
DownloadService 会启动一次。然后,第一个 URL 将被传递给它,它会开始下载。然后,完成后,DownloadService 将使用第二个 url。然后是第三个,以此类推。这一切都按顺序运行。
现在,您可以拥有第二个名为 UploadService 的 IntentService,它同样会将文件上传到给定的 URL。如果您使用不同的参数多次启动它,它也会按顺序运行到每个调用。 但是,它将与DownloadService 并行运行,因为它们是两个独立的Service。
编辑:就限制数量而言。我确定有一个,但是您可能会在到达它之前耗尽内存(或者认为一百种不同的服务不是做事的最佳方式)。
【解决方案2】:
您可以从 IntentService 的不同子类并行启动任何实例,但实际上只有 N 个服务将在 N 不是核心的时刻运行设备,如果我们并行运行超过 N 个服务,那么它们的线程将进行上下文切换,所有正在运行的服务将共享时钟时间。如果你启动多个 IntentService 的相同子类的实例,那么它们将串行运行,在这种情况下你需要使用 Service 类而不是 IntentService 来实现并行执行。