2016-02-12 81 views
0

我想在服务中运行多个线程。像谷歌文档例子:Android多线程服务

http://developer.android.com/guide/components/services.html

但是,因为你处理每次调用onStartCommand()自己, 可以同时执行多个请求。这不是 的例子,但如果这就是你想要的,那么你可以为每个请求创建一个新的 线程并立即运行它们(而不是等待前一个请求完成的 )。

我怎样才能同时执行多个请求?

例如,我想要启动10个线程取决于Message.what。

如何以及在哪里创建这10个线程?在OnCreate在服务?

但是OnCreate只在创建服务时执行一次。但如果我想添加线程服务dynamicallygenerate message取决于intent extras?例如:

Intent intent1 = new Intent(this, SimpleService.class); 
intent1.putExtra("what", 1); 
Intent intent2 = new Intent(this, SimpleService.class); 
intent2.putExtra("what", 2); 
... 
startService(intent1); 
startService(intent2); 
... 

,我应该创建10个处理器和10尺蠖每个线程?

谢谢!

+0

如果您需要对每个'startService'调用做出反应,您可以使用'onStartCommand'。 'onCreate'只被调用一次。目前还不清楚你想达到什么目标。 – eleven

+0

多个请求意味着网络电话? –

+0

@Mustansar Saeed,我的意思是这样的:我收到网络请求发送联系人并在服务中发送它们,同时发送联系人我收到请求发送文件,我想用不同的线程使用相同的服务发送此文件,同时发送联系人和文件的另一个请求可以来,等等。 (对不起,延迟回复,但我没有任何关于评论和答案的通知电子邮件)。 – jQuick

回答

1

我怎样才能同时执行多个请求?

使用a ThreadPoolExecutor,配置为合理数量的线程(例如,2倍的核心数加1)。

如何以及在哪里创建这10个线程?在OnCreate服务?

您可以在onCreate()中设置ThreadPoolExecutor,或者可能只是在字段初始值设定项中。

但是,当我创建服务时,OnCreate exec只有一次。

这就是为什么您使用ThreadPoolExecutor并将其配置为适当数量的线程。

但是,如果我想添加线程动态服务和生成消息取决于意图额外?

只需拨打onStartCommand()submit()到一个作品添加到ThreadPoolExecutor。如果有可用的线程,工作将立即运行。如果没有,你提供一个工作队列到ThreadPoolExecutor,你提交的工作将等待一个免费的线程。

+0

谢谢你的回答我会尝试这个(并感谢好书)! – jQuick

+0

@CommonsWare你可以通过一个简单的例子,我如何使用服务? –