服务中的Android多线程

时间:2016-02-12 13:22:21

标签: android multithreading service

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

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

  

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

如何同时执行多项请求?

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

如何以及在何处创建此10个帖子?在OnCreate服务中?

但是OnCreate只在我创建服务时执行一次。但是,如果我想为服务dynamically添加线程,而generate 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个looper?

谢谢!

1 个答案:

答案 0 :(得分:1)

  

如何同时执行多项请求?

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

  

如何以及在何处创建此10个帖子?在OnCreate服务中?

您可以在ThreadPoolExecutor中设置onCreate(),也可以在字段初始值设定项中设置。{/ p>

  

但是当我创建服务时,OnCreate只执行一次。

这就是您使用ThreadPoolExecutor并为适当数量的线程配置它的原因。

  

但是,如果我想动态添加线程并生成消息取决于意图附加?

只需致电submit()中的onStartCommand()即可向ThreadPoolExecutor添加一项工作。如果有可用的线程,工作将立即运行。如果没有,则为ThreadPoolExecutor提供工作队列,并且您提交的工作将等待一个免费线程。