サーバーから大量のデータをダウンロードする必要があります。ダウンロードには最低 10 秒かかります。ayntask クラスを使用してダウンロードするコードを次に示します。また、ダウンロード中にホームボタンをクリックした場合、無条件にダウンロードをキャンセルしたいです。問題は... cancel() メソッドを実行していますが、ダウンロード操作がキャンセルされません。アプリケーションを終了しても、logcat ビューでバックグラウンドで操作が実行されていることがわかります。doInBackground() メソッドの実行を停止したいだけです。ガイド/助けてください。
ダウンロードボタンをクリックすると:
dwnldTask = new DownloadTask ();
dwnldTask.execute(SERVER_URL);
そして、ここに Asynctask クラスがあります:
class DownloadTask extends AsyncTask<String, Void, Object>{
private Object response = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
displaying progress dialog on UI
}
@Override
protected Object doInBackground(String... params) {
try{
DataConnection dc = new DataConnection();
this.response = dc.connectToServer(params[0]);
if(isCancelled()){
return null;
}
}catch (Exception e) {
if(isCancelled()){
return null;
}
e.printStackTrace();
showToastMSG(e.getMessage());
}
return this.response ;
}
@Override
protected void onPostExecute(Object response) {
super.onPostExecute(response);
if(response != null ){
successfully downloaded... go to next activity
}
cancel progress dialog here
}
}
内部 onPause()..
@Override
protected void onPause() {
super.onPause();
if(dwnldTask != null && dwnldTask.getStatus() == AsyncTask.Status.RUNNING){
dwnldTask.cancel(true);
}
cancel the progress dialog if it is showing
}
DataConnection という名前の別のクラスにあるメソッドを次に示します...
public Object connectToServer(String url) throws Exception{
HttpGet request = new HttpGet(url);
request.addHeader("accept","application/json");
HttpResponse response = httpClient.execute(request);
HttpEntity httpEntity = response.getEntity();
InputStream responseInputStream = httpEntity.getContent();
return myUtilObject.convertInputStreamToString(responseInputStream);
}