你好,我正在使用AlertDialog,如果单击确定按钮,就可以从一个Activity切换到另一个Activity。结果在切换Activity后出现了错误,这是为什么呢。
这是我的代码
package com.example.word.Activity;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.TextView;
import com.example.word.Bean.TranslateBean;
import com.example.word.Bean.WordsBean;
import com.example.word.IView.IExtraWordView;
import com.example.word.Presenter.ExtraWordPresenter;
import com.example.word.R;
import com.example.word.Util.NetUtil;
import com.example.word.Util.UrlPlayer;
public class Main31Activity extends AppCompatActivity implements IExtraWordView {
ExtraWordPresenter ext;
TextView task, word, yinbiao,task2;
String ex5="";
String ci="";
String ci4="";
Intent intent;
String str="";
String uri="";
ImageButton imgbtn2;
AlertDialog alg2,alg3,alg4;
String ex2;
Asy asy;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
root();
setContentView(R.layout.activity_main31);
intent=getIntent();
str=intent.getStringExtra("word");
task = findViewById(R.id.task);
task2=findViewById(R.id.task2);
word = findViewById(R.id.word);
imgbtn2=findViewById(R.id.imgbtn2);
yinbiao = findViewById(R.id.yinbiao);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
imgbtn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UrlPlayer.URLPlayer(Main31Activity.this,uri);
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(NetUtil.getNetType(Main31Activity.this)==-1){
AlertDialog.Builder al = new AlertDialog.Builder(Main31Activity.this);
al.setTitle("提示");
al.setMessage("不好意思,XXXXXX");
al.setCancelable(false);
al.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alg3.dismiss();
Intent intent = new Intent(Main31Activity.this, Main30Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
alg3 = al.create();
alg3.show();
}
else {
asy=new Asy();
asy.execute();//异步的网络操作
}
}
@Override
public void showExtraTrans(WordsBean bean) {
if(NetUtil.getNetType(Main31Activity.this)!=-1) {
if (bean.getExplain().size() != 0) {
if (bean.getFayin().size() != 0) {
word.setText(bean.getWord());
yinbiao.setText(bean.getYinbiao().get(0));
uri = bean.getFayin().get(0);
for (int i = 0; i < bean.getCixing().size(); i++) {
if (i != 0) {
ci4 = "\n";
} else {
ci4 = "";
}
String ci1 = bean.getCixing().get(i);
String ci2 = "\n" + bean.getExplain().get(i);
String ci3 = ci4 + ci1 + ci2;
ci = ci + ci3;
}
for (int i = 0; i < bean.getLiju().size(); i++) {
ex2 = bean.getLiju().get(i).getOrig() + "\n" + bean.getLiju().get(i).getTrans();
if (i != 0) {
ex5 = ex5 + "\n" + ex2;
}
if (i == 0) {
ex5 = ex2;
}
}
task2.setText(ci);
task.setText(ex5);
}
}
if (bean.getExplain().size() == 0) {
AlertDialog.Builder al = new AlertDialog.Builder(Main31Activity.this);
al.setTitle("提示");
al.setMessage("不好意思,XXXXXX");
al.setCancelable(false);
al.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alg4.dismiss();
Intent intent = new Intent(Main31Activity.this, Main30Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
alg4 = al.create();
alg4.show();
}
if(bean.getExplain().size()!=0) {
if (bean.getFayin().size() == 0) {
AlertDialog.Builder al = new AlertDialog.Builder(Main31Activity.this);
al.setTitle("提示");
al.setMessage("不好意思,XXXXXX。");
al.setCancelable(false);
al.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alg2.dismiss();
Intent intent = new Intent(Main31Activity.this, Main30Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
alg2 = al.create();
alg2.show();
}
}
}
}
/*退出按钮退出方法*/
public void root() {
if (!isTaskRoot()) {
final Intent intent = getIntent();
final String intentAction = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
finish();
return;
}
}
}
/*系统自带按钮的监听*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);//音量管理器
/*返回按钮监听*/
if(keyCode==KeyEvent.KEYCODE_BACK){
Intent intent=new Intent(Main31Activity.this,Main30Activity.class);//回退到英汉词典查询界面
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
/*音量加按钮*/
if(keyCode==KeyEvent.KEYCODE_VOLUME_UP) {
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FX_FOCUS_NAVIGATION_UP);
return true;
}
/*音量减按钮*/
if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN) {
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FX_FOCUS_NAVIGATION_UP);
return true;
}
return true;
}
class Asy extends AsyncTask{
@Override
protected Object doInBackground(Object[] objects) {
ext = new ExtraWordPresenter(Main31Activity.this);//网络操作,采用MVP模式
ext.getData(str);
return null;
}
}
}
出现的错误如下
2022-03-23 11:04:52.313 11197-11197/com.example.word E/WindowManager: android.view.WindowLeaked: Activity com.example.word.Activity.Main31Activity has leaked window DecorView@b6e6c20[Main31Activity] that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:791)
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:775)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:408)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109)
at android.app.Dialog.show(Dialog.java:379)
at com.example.word.Activity.Main31Activity.showExtraTrans(Main31Activity.java:138)
意思是你在跳转页面的时候,本页面还有弹窗没有dismiss,你检查一下代码
在onDestory方法里销毁你的AlertDialog,估计是你存在多个AlertDialog,有的没销毁掉