首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两种不同的AsyncTasks不从foregroundService开始

两种不同的AsyncTasks不从foregroundService开始
EN

Stack Overflow用户
提问于 2014-05-20 19:29:50
回答 2查看 59关注 0票数 0

我编写了一个前台服务,在onCreate方法中这样做:

代码语言:javascript
复制
public void onCreate(){
     //........
     startForeground(id,notification);
     Task1=new Task(this);
     task1.execute();
     Task2=new Task(this);
     Log.d("T2","Created");
     task2.execute();
     Log.d("T2","Executed");
}

现在发生的情况是,上面的代码导致task1执行(每个循环后睡眠时间为60秒),但从不让task2启动它的doInBackground()。

我不确定每个logcat的wrong.As是什么,它清楚地表明task2.execute()确实得到了invoked.But,为什么第二个任务的doInBackground()还没有开始呢?我最初计划有两个前台服务,但是在阅读了几个这样的帖子之后,我决定在前台只有一个服务,让它有两个不同的同步任务来在后台进行一些连续的处理。请帮我把这件事做好!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-20 19:40:32

AsyncTask的默认执行器(从蜂窝开始)是AsyncTask.SERIAL_EXECUTOR,这意味着在给定时间只执行一个任务。

如果您需要并行性,只需使用AsyncTask.THREAD_POOL_EXECUTOR,即

代码语言:javascript
复制
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);

而不是仅仅

代码语言:javascript
复制
task.execute(params);

请参见Order of Execution节中的AsyncTask文档

票数 4
EN

Stack Overflow用户

发布于 2014-05-20 19:36:50

这仅仅是因为从Android3.0开始,AsyncTask-的工作在一个背景线程中进行:

从蜂窝开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。

http://developer.android.com/reference/android/os/AsyncTask.html

因此,Task2永远不会运行,因为您在Task1完成之前运行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23768355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档