【发布时间】:2013-12-22 13:12:03
【问题描述】:
我有一个 IntentService,它应该像管理器一样工作,并在提交到 ThreadPool 的队列 (Runnable) 中创建任务。
我对 IntentService 的生命周期有点困惑:
protected abstract void onHandleIntent (Intent intent) 方法已经在一个单独的线程上运行。在onHandleIntent 中,我将创建一个新的 Runnable 实例并将其提交给 ThreadPool。我的服务如下所示:
public class SyncService extends IntentService {
private final ThreadPoolExecutor threadPool;
public SyncService() {
super("SyncService");
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
threadPool = new ThreadPoolExecutor(1, 1, 20, TimeUnit.SECONDS, queue);
}
@Override
public void onCreate() {
super.onCreate();
EventBus.getInstance().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getInstance().unregister(this);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent.getAction().equals("sync")){
threadPool.submit(new SyncRunnable());
}else
if(intent.getAction().equals("delete")){
threadPool.submit(new DeleteRunnable());
} else
if(intent.getAction().equals("register")){
threadPool.submit(new RegisterRunnable())
}
}
}
我的问题:
- 在 IntentService 中使用 ThreadPool 是个好主意吗?
- 如果我使用 ThreadPool,如果 Threadpool 没有更多 Runnables 可以执行或排队,IntentService 将被销毁,对吗?
- IntentService 是否已经是我想要实现的目标,我是否应该在
onHandleIntent()因为这个方法已经在 IntentService 工作线程?如果是,是否有队列限制 意图,因为 onHandleIntent() 可以在 30 秒之前运行 完成并处理下一个 Intent。
【问题讨论】:
标签: android multithreading threadpool intentservice