これは重複した質問である可能性がありますが、探しているものが見つかりませんでした。UI アクティビティ new LoadData().execute();
で AsyncTask を呼び出しており、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);
ましたが、それもうまくいきません。
どうすればいいのか、またはdoInBackgroundでisCancelled()を使用する方法を教えてもらえますか。
ありがとう。