To może być duplikat pytania, ale nie znalazłem tego, czego szukałem. Wywołuję AsyncTask w aktywności interfejsu użytkownika new LoadData().execute();
i w DoInBackground wywołuję metodę, która wymaga czasu. Chcę przerwać ten wątek, jeśli dane nie powrócą po pewnym czasie. Poniżej znajduje się kod, jak próbowałem to zrobić.Anuluj AsyncTask po pewnym czasie
class LoadData extends AsyncTask<String, String, String>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
startTime = System.currentTimeMillis();
}
protected String doInBackground(String... args)
{
DataCollector dc = new DataCollector();
data = dc.collectData(query);
//Here I check if the time is greater than 30 seconds then cancel
if(((System.currentTimeMillis()-startTime)/1000)>30)
{
cancel(true);
}
return null;
}
}
Ale to nie zatrzymuje zadania po 30 sekundach, w rzeczywistości zajmuje więcej czasu. Próbowałem również get(long timeout, TimeUnit unit);
, ale to też nie działa.
Czy ktoś może mi pokazać, jak mogę to zrobić i jak używać metody isCancelled() w doInBackground.
Dzięki.
Może ta odpowiedź pomaga: http://stackoverflow.com/a/11191070/3307066. – jbarrameda