2013-04-18 28 views
6

Pracuję nad aplikacją, która używa dużo AsyncTasks. Kiedy zacząłem uczestniczyć w kodowaniu tej aplikacji, parametr targetSdkVersion został ustawiony na 10, więc nie mieliśmy problemów z AsyncTasks, ponieważ wszystkie zostały wykonane na równoległych wątkach w tle. Ponieważ ustawiliśmy wartość targtSdkVersion na 17, mamy pewne problemy z zadaniami, ponieważ są one teraz wykonywane na pojedynczym wątku tła. Aby rozwiązać ten problem, znalazłem następujący kod do używania specjalnie równoległych zadań:Android AsyncTask jako argument metody

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
} else { 
    myTask.execute(); 
} 

Teraz, ponieważ mamy kilka zadań wymagających te linie kodu, chciałbym napisać metodę w naszej własnej klasy Utils który wykonuje zadania w ten sposób ... ale nie mogę tego osiągnąć, ponieważ nie mogę przekazać różnych zadań do metody jako argumentu z powodu "Paramu | Postęp | Wynik "rzeczy różnią się od jednego zadania do drugiego. Czy istnieje sposób na osiągnięcie naszego celu? Jakieś pomysły?

+0

you metoda może brać AsyncTask jako param, myślę – njzk2

+0

już próbował, ale nie działa ... zawsze jestem coraz : java.lang.ClassCastException: java.lang.Object [] nie można przesłać do java.lang.Void [] –

Odpowiedz

9

Ponieważ AsyncTask jest sparametryzowaną klasą, należy użyć generycznych. Coś takiego:

@SuppressLint("NewApi") 
static <P, T extends AsyncTask<P, ?, ?>> void execute(T task, P... params) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 
    } else { 
    task.execute(params); 
    } 
} 

Zastosowanie tak:

MyAsyncTask task = new MyAsyncTask(); 
Utils.execute(task); 
+0

BAM! Prace! Próbowaliśmy też czegoś takiego, ale zawsze mieliśmy ten sam wyjątek ... więc dziękuję bardzo za to rozwiązanie! :) –

+1

Udało mi się również sprawić, by działał z podpisem 'statyczny void execute (AsyncTask task, Params ... params)' –

Powiązane problemy