当我运行以下代码时,我会收到以下错误消息:"020-11-07 18:45:26.737 20684-20684/co.user.example E/WindowManager:android.view.WindowLeaked:活动com.user.example.Pages.Dashboard.Home已泄漏窗口DecorView@14fe64f最初添加到此处的[Home]";但我的应用程序仍然可以正常运行。我该如何解决那个问题_
这些代码属于一个活动。
public void login(View v) {
if( !validateUserEmail() | !validatePassword()){
return;
}
UserInfo userInfo = new UserInfo(mail,password);
SendRequestToAPI.sendRequest(userInfo,Login.this);
}
这些代码属于一个名为SendRequestToAPI的类。
public static void showWarningAlert(final Context context, String title,
String contentText, String confirmText){
SweetAlertDialog alertDialog = new
SweetAlertDialog(context,SweetAlertDialog.WARNING_TYPE);
alertDialog.setTitle(title);
alertDialog.setContentText(contentText);
alertDialog.setConfirmText(confirmText);
alertDialog.setConfirmClickListener(new
SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
Intent intent = new Intent(context, Login.class);
context.startActivity(intent);
((Activity)context).finish();
}
}).setCancelButton("Cancel", new
SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
sweetAlertDialog.dismissWithAnimation();
}
})
.show();
}
当您有一个警报窗口,但活动已销毁或退出时,就会发生这种情况。。换句话说,如果您有一个警报窗口,并且由于代码中的某些逻辑,为您提供上下文的活动已经被破坏或停止。
确保无论何时您的活动被破坏,您的警报对话框也会被取消。。您可以在活动的destroy((方法和onStop方法((中编写此逻辑。。警报对话框只能在关联活动激活后立即存在并工作,而不会发生任何泄漏。
您还可以通过确保无论何时显示alertdialog,您的活动都不会停止或被破坏来实现其他方式。
实现您想要的任何方式,但onPause((和onDestroy((是关键。
当我向这个代码流添加if块时,我的错误得到了解决。
public void onClick(SweetAlertDialog
sweetAlertDialog) {
if (sweetAlertDialog != null &&
sweetAlertDialog.isShowing()) {
sweetAlertDialog.dismiss();
}
Intent intent = new Intent(context,
Login.class);
context.startActivity(intent);
((Activity)context).finish();
}