Это может быть дублированный вопрос, но я не нашел то, что искал. Я вызываю AsyncTask в пользовательском интерфейсе new LoadData().execute();
и в doInBackground я вызываю метод, который требует времени. Я хочу прервать этот поток, если данные не возвращаются через некоторое время. Ниже приведен код, как я пытался это сделать.
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;
}
}
Но это не останавливает задачу через 30 секунд, на самом деле это занимает больше времени. Я попробовал get(long timeout, TimeUnit unit);
но это тоже не работает.
Может ли кто-нибудь показать мне, как я могу это сделать или как использовать isCancelled() в doInBackground.
Благодарю.