如何从活动中完成2 AsyncTask后启动新活动?

时间:2015-07-01 11:02:03

标签: android android-activity android-asynctask

在我的主要Activity中有两个不同的AsyncTask在后​​台运行。

在AsyncTask之后启动新的Activity

这工作正常

主要活动 ---->>>> 新活动

问题:

但我的问题是没有完成两个AsyncTasks,它转移到新的Activity

两个任务必须完成,然后才转到新Activity

帮我解决这个问题。

AsyncCallWSfor1 task1 = new AsyncCallWSfor1();
                // Call execute
                task1.execute();


                AsyncCallWSfor2 task2 = new AsyncCallWSfor2();
                // Call execute
                task2.execute();

        Toast.makeText(sign_in.this, "Login Successfull",Toast.LENGTH_LONG).show();
        Intent intent = new Intent(MainActivivty.this,NewActvity.class);
            startActivity(intent);
            finish();

7 个答案:

答案 0 :(得分:2)

它肯定会解决你的问题,做这样的事情

  //create variable for your activity or fragment
            Boolean isTask1Completed=false,isTask2Completed=false;

            //on post execute of task 1
            isTask1Completed = true;
            if(isTask1Completed&&isTask2Completed){
                //start activity here
            }

            //on post execute of task 2
            isTask2Completed = true;

            if(isTask1Completed&&isTask2Completed){
                //start activity here
            }

答案 1 :(得分:1)

  

为什么不能使用一个异步任务

尝试这两种方法
        private class MyTask extends AsyncTask<String, String, String> {

                        @Override
                        protected void onPreExecute() {
                            super.onPreExecute();

                        }


                        @Override
                        protected String doInBackground(String... url) {
                          String result="";
                         if(url.equals("m1"))
                            {

                                <!--Method one-->
                                 result="first";
                            }else
                            {

                                 <!--Method Two-->
                                  result="second";

                            }

                                return result;
                        }

                        @Override
                        protected void onPostExecute(String result) {
                              if(result.equals("second")
                               {
                                <!--Start activity-->
                               }else
                               {
                                 <!--Call Asynchronous task with second method-->
                              }
                    }
                }

答案 2 :(得分:1)

使用一些简单的检查器

boolean first = false;
boolean second = false;

AsyncTask1
onPostExecute() { 
  first = true;
  if (first && second) startActivity();
} 

AsyncTask2
onPostExecute() { 
  second = true; 
  if (first && second) startActivity();
}

答案 3 :(得分:0)

取一个布尔变量

boolean firstCompleted=false;

onPostExecute(-)的{​​{1}}中,将其设为AsyncCallWSfor1

true

firstCompleted=true; onPostExecute(-)开始新活动

AsyncCallWSfor2

希望这会对你有所帮助。

答案 4 :(得分:0)

您需要添加以下代码

  

Toast.makeText(sign_in.this,&#34; Login Successfull&#34;,Toast.LENGTH_LONG).show();       Intent intent = new Intent(MainActivivty.this,NewActvity.class);      startActivity(意向);        光洁度()

在你的..

  

AsyncCallWSfor2 task2 = new AsyncCallWSfor2();

发布方法它运行正常....

答案 5 :(得分:0)

Asynctasks 串行执行。你应该把它放在第二个任务的postExecute上。

  

首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被改为一个线程池,允许多个任务并行运行。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。

     

如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object [])。

答案 6 :(得分:0)

我建议使用Callbacks。 您启动(我认为)API客户端或其他东西并运行查询。 当它启动时,它将在一个新线程中运行请求,一旦它完成加载,它将回调到已启动请求的活动。

通过这种方式,您可以确定,任务将一个接一个地完成。

活动 - &gt;新的ApiClient() - &gt;执行(url,参数) - &gt; new Thread() - &gt;运行查询 - &gt;致电ApiClientCallback - &gt;活动收到回复 - &gt;做任何必要的事情

看看这里:http://www.techotopia.com/index.php/A_Basic_Overview_of_Android_Threads_and_Thread_handlers