首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在另一个AsyncTask期间启动AsyncTask

如何在另一个AsyncTask期间启动AsyncTask
EN

Stack Overflow用户
提问于 2013-03-01 12:45:20
回答 2查看 203关注 0票数 0

主体代码为:

代码语言:javascript
复制
public class AsyncTask1 extends AsyncTask <Void, Void, Boolean>{
    @Override
    protected Boolean doInBackground(Void... params){
        //...
        asyncTask2 = new AsyncTask2();
        //...
        Log.i("AsyncTask1","Launch asyncTask2");
        String taskResult = tasyncTask2.execute().get().toString();
        //...
    }
    //...
}

public class AsyncTask2 extends AsyncTask <Void, Void, String>{
//...
@Override
protected String doInBackground(Void... params){
    Log.i("AsyncTask2", "I have started");
    //...
}
//...
}

这个代码模板可以在2.3.5和4.2上工作,但是在Jelly Bean更新之后它就不能工作了。为什么?

2.3.5

AsyncTask1通知+

AsyncTask2通知+

4.2 (更新后):

AsyncTask1通知+

AsyncTask2通知-

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 13:17:40

根据Jellybean之后的Asynctask任务的文档部分,Asynctask实例必须在UI thread.and创建实例上创建,并在另一个asycntask的后台执行其操作,该asynctask是另一个工作线程而不是UI thread.So。您不应该在UI线程以外的其他线程中创建/执行asynctask的实例

票数 0
EN

Stack Overflow用户

发布于 2013-03-01 12:56:11

默认情况下,在安卓3.0+上,每个the documentation on execute的AsyncTask.execute都是单线程的。

对于每个this blog,您可以将您的tasyncTask2.execute().get().toString()替换为:

代码语言:javascript
复制
String taskResult;
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
    taskResult = tasyncTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).get().toString();
}
else {
    taskResult = tasyncTask2.execute().get().toString();
}

或者通过替换tasyncTask2.execute().get().toString()来组合您的AsyncTasks,一个本地方法调用,调用您在AsyncTask2的doInBackground方法中所做的事情。

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

https://stackoverflow.com/questions/15150657

复制
相关文章

相似问题

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