2015-07-01 4 views
1

В моем основном Activity Имея два разных AsyncTask Запуск в фоновом режиме.Как начать новую работу после завершения работы 2 AsyncTask?

после того, как AsyncTask начнет новый Activity.

это работает отлично

Основная деятельность ---- >>>>Новая активность

Проблема:

но моя проблема не окончив два AsyncTasks, его Перемещение к новому Activity

Обе задачи должны быть заполнены n только перейдите к New 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(); 
+0

написать код в сообщении выполнить asyctask, чтобы начать новую активность –

+0

post Execute ok, обе задачи Async, имеющие Postexecute, где я должен добавить – Kumar

+0

, вам сначала нужно узнать, что делает AsyncTask. и сделать алгоритм для ожидания выполнения обеих задач. – guness

ответ

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 
      } 
+0

Это то, что вы ищете, кроме проблемы синхронизации. – guness

+0

Это для того, когда запускаются обе задачи, и мы должны выяснить, оба они завершены или нет, если да, тогда перейдите –

+0

на вторую мысль, так как 'onPostExecute' вызывается в ui, синхронизация не будет проблемой. – guness

0

Возьмем логическую переменную

boolean firstCompleted=false; 

В onPostExecute(-) из AsyncCallWSfor1 сделать это как true

firstCompleted=true; 

И в onPostExecute(-) из AsyncCallWSfor2 начать новую активность

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

Надеюсь, это поможет вам.

+0

это делает задачи серийными, он мог бы объединить две задачи в одну. – guness

+0

, но здесь первая задача не выполнена. 2 задачи не будут выполняться? – Kumar

+0

@ Kumar Я обновил свой ответ после проверки. –

0

Вам нужно добавить код ниже

Toast.makeText (sign_in.this, "Логин преуспевающим", Toast.LENGTH_LONG) .show(); Целевое намерение = новое намерение (MainActivivty.this, NewActvity.class); startActivity (намерение); отделка()

в вашем ..

AsyncCallWSfor2 task2 = новый AsyncCallWSfor2();

пост метод будет работать нормально ....

1

Почему вы не можете попробовать оба метода с использованием одного Asynchronous задачи

 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--> 
           } 
        } 
       } 
+0

, потому что его данные извлекаются из веб-службы. Два разных метода. – Kumar

0

Выполнены асинхронные операции серийно. Вы должны поместить его в postExecute второй задачи.

При первом вводе AsyncTasks выполнялись последовательно на одном фоне. Начиная с DONUT, это было изменено на пул потоков, позволяющий нескольким задачам работать параллельно. Начиная с HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать ошибок обычного приложения, вызванных параллельным выполнением.

Если вы действительно хотите выполнить параллельное выполнение, вы можете вызвать executeOnExecutor (java.util.concurrent.Executor, Object []) с помощью THREAD_POOL_EXECUTOR.

+0

это, кажется, комментарий для меня. нормально запускать две задачи поочередно, выполнение будет параллельным. – guness

+1

Вы уверены, что это то, что говорит документация. > При первом вводе AsyncTasks выполнялись последовательно на одном фоновом потоке.Начиная с DONUT, это было изменено на пул потоков, позволяющий нескольким задачам работать параллельно. Начиная с HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать ошибок обычного приложения, вызванных параллельным выполнением. Если вы действительно хотите выполнить параллельное выполнение, вы можете вызвать executeOnExecutor (java.util.concurrent.Executor, Object []) с помощью THREAD_POOL_EXECUTOR. –

0

Я предлагаю работать с обратными вызовами. Вы запускаете свой (я думаю) API-клиент или что-то еще и запускаем запрос. Когда он запустится, он запустит запрос в новом потоке, и как только он закончит загрузку, он перезвонит в действие, в котором запущен запрос.

На этом пути вы можете быть уверены, задачи будут выполняться один за другим.

активность -> новый ApiClient() -> Execute (URL, параметры) -> новая тема() -> Выполнить запрос -> Вызов ApiClientCallback -> активность получает ответ -> делать все, что необходимо

Имеют смотрите здесь: http://www.techotopia.com/index.php/A_Basic_Overview_of_Android_Threads_and_Thread_handlers

1

Используйте несколько простых шашек

boolean first = false; 
boolean second = false; 

и

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

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

на вторую мысль, неустойчивость не требуется. – guness

Смежные вопросы