私はAsyncTask
にWindowLeaksを持っていて、それに対処する方法がわかりません。onPostExecute
にdismiss()
を入れてみましたが、それでも私には同じ問題があります。AsyncTaskでWindowLeaked
protected void onPreExecute() {
if(this.showLoadingMessage) {
this.progressDialog = new ProgressDialog(this.context);
this.progressDialog.setMessage(this.loadingMessage);
this.progressDialog.show();
this.progressDialog.setCancelable(false);
}
super.onPreExecute();
}
protected void onPostExecute(String result) {
if(this.showLoadingMessage && this.progressDialog.isShowing()) {
this.progressDialog.dismiss();
}
result = result.trim();
if(this.asyncResponse != null) {
this.asyncResponse.processFinish(result);
}
if(this.exception != null) {
if(this.exceptionHandler != null) {
this.exceptionHandler.handleException(this.exception);
}
if(this.eachExceptionsHandler != null) {
Log.d(this.LOG, "" + this.exception.getClass().getSimpleName());
if(this.exception instanceof MalformedURLException) {
this.eachExceptionsHandler.handleMalformedURLException((MalformedURLException)this.exception);
} else if(this.exception instanceof ProtocolException) {
this.eachExceptionsHandler.handleProtocolException((ProtocolException)this.exception);
} else if(this.exception instanceof UnsupportedEncodingException) {
this.eachExceptionsHandler.handleUnsupportedEncodingException((UnsupportedEncodingException)this.exception);
} else if(this.exception instanceof IOException) {
this.eachExceptionsHandler.handleIOException((IOException)this.exception);
}
}
}
}
このコードが動作しているときにこのリークが発生します。
HashMap postNotification = new HashMap();
postNotification.put("txtOwner", tvRenter.getText().toString());
AsyncClass taskCount = new AsyncClass(ownerAccept.this, postNotification, new AsyncResponse() {
@Override
public void processFinish(String s) {
if(s.contains("success")){
HashMap postNotif = new HashMap();
postNotif.put("txtOwner", tvRenter.getText().toString());
AsyncClass taskAdd = new AsyncClass(ownerAccept.this, postNotif, new AsyncResponse() {
@Override
public void processFinish(String s) {
if(s.contains("success")){
Log.d(TAG, s);
Intent in = new Intent(ownerAccept.this, RenterTabs.class);
startActivity(in);
finish();
}
}
});
taskAdd.execute("http://carkila.esy.es/carkila/notificationAccept.php");
} else {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
}
}
});
taskCount.execute("http://carkila.esy.es/carkila/notificationCount.php");
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = a_accept.create();
alert.setTitle("Accept");
alert.show();
ここからの 'context'はどこですか? 'コンテキスト'を提供する 'Activity'を終了したら、あなたはリークで終わるでしょう。 – Pztar
'LogCat'を投稿できますか?古いものを解読せずにアクティビティを終了することなく、新しい 'Dialog'を表示しているので、あなたの問題の原因と思われる最初のコールバックで新しいタスクを実行しているようです。 – Pztar