2016-04-05 3 views
-4

Я новичок в разработке android, и я хотел бы спросить, как подождать несколько задач async, которые уже запущены. Также, когда я пытаюсь спать в главной теме, многие из них приостанавливаются системой. Когда я использую arraylist, чтобы добавить их, а затем называть каждого из них get(), многие из них никогда не заканчиваются вовремя. Пожалуйста, дайте мне пример кода, потому что я ищу его за три дня ... Thx !!Ждите задач async в android

for(){ 
    async... 
    async.execute(); 
    arraylist.add(async); 
} 
... 
for(arraylist.size){ 
    arraylist.get().get(); 
} 
+0

Вы имеете в виду 'AsyncTask', правильно? Имена важны. И 'AsyncTask' используется в потоке пользовательского интерфейса, я хотел бы увидеть больше кода UI в этом примере. То, что на самом деле компилируется, было бы лучше. – markspace

+0

что вы пытаетесь сделать? вопрос непонятен. – arsent

+0

AsyncTask сообщает вам, когда он закончил, включив событие onPostExecute(). Для справки: http://developer.android.com/intl/es/reference/android/os/AsyncTask.html –

ответ

0

Я постараюсь ответить на ваш вопрос здесь, но вопрос не ясен.

Если вы хотите, чтобы проверить, есть ли AsyncTask завершено или не в ArrayList, мы можем использовать getStatuscall, которые возвращают нам status, и один из статуса, к счастью, это FINISHED, так что вы можете проверить свой статус любой данной AsyncTask.

Если вы хотите спать до тех пор, пока не закончится один из AsyncTask, лучший подход, вероятно, включает в себя что-то делать в onPostExecute. Когда вы override it, вы можете сделать что-то, чтобы уведомить главный поток. Один из способов, вы можете сделать это здесь:

public interface Callback { 
    public void callBack(int id); 
} 
public class MainActivity implements Callback { 
    private void function() { 
    //do your thing 
    AsyncTask task0 = new MyAsyncTask(this, 0); //implement your own asynctask here, 
    //with one of the parameters this activity so that you can get a callback. 
    //Also, optionally give in the id so that you know what index of asynctask is finished first. 
    //do the same thing for other tasks 
    task1.execute(params); 
    } 

    public void callBack(int id) { 
    arrayList.get(id).get(); //this is done 
    } 

В вашем AsyncTask, вы просто переопределить onPostExecute что-то вроде этого

protected void onPostExecute (Result result) { 
    //do your thing 
    mainActivity.callBack(id); 
} 

Надеется, что это помогает.

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