Reputation: 19956
inviteBu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(ChoiceList.size()>0)
{
LayoutInflater factory = LayoutInflater.from(MobileConnectActivity.this);
final View textEntryView = factory.inflate(R.layout.invite_dialog, null);
final EditText et =(EditText) textEntryView.findViewById(R.id.usercontent_edit);
dia= new AlertDialog.Builder(MobileConnectActivity.this)
.setTitle(getString(R.string.invite_input_content))
.setView(textEntryView)
.setPositiveButton(getString(R.string.invite_send), new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, int whichButton) {
dialog.dismiss();
if(et.getText().toString()==null && et.getText().equals("") )
{
Toast.makeText(getApplicationContext(), getString(R.string.invite_content_check), Toast.LENGTH_SHORT).show();
}
else{
new AsyncTask<Void, Void, String>() {
CustomDialog mProgressBar = new CustomDialog(MobileConnectActivity.this, R.style.dialog);
protected void onPreExecute() {
mProgressBar.show();
};
protected void onCancelled() {
mProgressBar.hide();
};
@Override
protected String doInBackground(Void... params) {
ChoiceList=removeDuplicateList(ChoiceList);
for(int i=0;i<ChoiceList.size();i++)
{
Log.i("aaa",""+ChoiceList.get(i));
sendSMS(ChoiceList.get(i), et.getText().toString());
}
return "OK";
}
protected void onPostExecute(String response) {
mProgressBar.hide();
if (response != null ) {
Toast.makeText(getApplicationContext(), getString(R.string.invite_succeed), Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(MobileConnectActivity.this, inviteMainActivity.class);
startActivity(intent);
MobileConnectActivity.this.finish();
} else {
//mHelper.showResponseErrorMessage(response);
Intent intent = new Intent();
intent.setClass(MobileConnectActivity.this, inviteMainActivity.class);
startActivity(intent);
finish();
}
};
}.execute();
}
}
})
.setNegativeButton(getString(R.string.invite_cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked cancel so do some stuff */
}
}).show();
}
else
{
Toast.makeText(getApplicationContext(), getString(R.string.invite_choice_check), Toast.LENGTH_SHORT).show();
}
}
});
it give me :
07-21 03:36:24.519: E/WindowManager(23240): Activity com.portaura.myaura.invite.MobileConnectActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405c32d0 that was originally added here
07-21 03:36:24.519: E/WindowManager(23240): android.view.WindowLeaked: Activity com.portaura.myaura.invite.MobileConnectActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405c32d0 that was originally added here
07-21 03:36:24.519: E/WindowManager(23240): at android.view.ViewRoot.<init>(ViewRoot.java:266)
07-21 03:36:24.519: E/WindowManager(23240): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:174)
07-21 03:36:24.519: E/WindowManager(23240): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:117)
07-21 03:36:24.519: E/WindowManager(23240): at android.view.Window$LocalWindowManager.addView(Window.java:424)
07-21 03:36:24.519: E/WindowManager(23240): at android.app.Dialog.show(Dialog.java:241)
07-21 03:36:24.519: E/WindowManager(23240): at com.portaura.myaura.invite.MobileConnectActivity$3$1$1.onPreExecute(MobileConnectActivity.java:161)
07-21 03:36:24.519: E/WindowManager(23240): at android.os.AsyncTask.execute(AsyncTask.java:391)
07-21 03:36:24.519: E/WindowManager(23240): at com.portaura.myaura.invite.MobileConnectActivity$3$1.onClick(MobileConnectActivity.java:201)
07-21 03:36:24.519: E/WindowManager(23240): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:165)
07-21 03:36:24.519: E/WindowManager(23240): at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 03:36:24.519: E/WindowManager(23240): at android.os.Looper.loop(Looper.java:130)
07-21 03:36:24.519: E/WindowManager(23240): at java.lang.reflect.Method.invokeNative(Native Method)
07-21 03:36:24.519: E/WindowManager(23240): at java.lang.reflect.Method.invoke(Method.java:507)
Upvotes: 38
Views: 60715
Reputation: 1189
The problem is AsyncTask.
new AsyncTask<Void, Void, String>() {
CustomDialog mProgressBar = new CustomDialog(MobileConnectActivity.this, R.style.dialog);
....
}
You create a progress bar inside async task which makes a problem when you move to another activity.
For this before dismiss or show()
if(!isFinishing() && dialog != null) { dialog.dismiss();}
Usage of isFinishing()
* Check to see whether this activity is in the process of finishing,
* either because you called {@link #finish} on it or someone else
* has requested that it finished. This is often used in
* {@link #onPause} to determine whether the activity is simply pausing or
* completely finishing.
*
* @return If the activity is finishing, returns true; else returns false.
Upvotes: 2
Reputation: 4160
In onStop()
or onDestroy()
callback, dismiss the dialog using dialogName.dismiss();
Also do a null check. That is:
if (dialogName != null) {
dialogName.dismiss();
}
Upvotes: 5
Reputation: 2979
The problem for me was happening because I used the android:noHistory="true"
for the activity that was causing the problem, and it only happened on Android 6.0 API 23.
Upvotes: 0
Reputation: 7293
Another scenario where this error occurs is when the app crushes while a dialog is shown. Look above this error for additional errors.
Upvotes: 5
Reputation: 211
Simply dismissing the dialog was not enough to get rid of the error for me. It turns out my code was holding onto a reference to the dialog even after it was dismissed. The key for me was to set that reference to null after dismissing the dialog.
Upvotes: 0
Reputation: 1556
Whenever you initiate a ProgressDialog, that should be dismissed properly after the background task gets done, or even cancellation of the background running task. So,
instead of mProgressBar.hide();
use mProgressBar.dismiss();
you will not get android.view.WindowLeaked error
hope this helps
Upvotes: 15
Reputation: 6165
Check if you are using finish() function before the mDialog.show() function. If it is remove the finish() and add it after the show().
Upvotes: 11
Reputation: 52800
whren you miss this code : mProgressDialog.dismis();
that time may be you will receive this type of error.
Upvotes: 7
Reputation: 5368
Window leaked exceptions are usually caused by dialogs which are not dismissed properly. ie if you are planning to dismiss a dialog in Onpostexecute of asynctask and the activity that created it has ended it will throw a window leak. Make sure you dimisss dialog in onPause of the activity.
Upvotes: 100