Closed lcf687619 closed 5 years ago
WindowManager: android.view.WindowLeaked: Activity com.***.app.ui.main.MainActivity has leaked window android.widget.LinearLayout{7b64701 V.E...... ......ID 0,0-668,141} that was originally added here
at android.view.ViewRootImpl.
你好,这个问题已经被修复好,更新一下版本即可
可以现在告诉我下怎么修复的么
复制一下来自WindowHelper类中的代码:
// A跳转B页面的生命周期方法执行顺序:
// onPause(A)->onCreate(B)--->onStart(B)--->onResume(B)--->onStop(A)--->onDestroyed(A)
@Override
public void onActivityPaused(Activity activity) {
// 取消这个吐司的显示
mToastHelper.cancel();
// 不能放在 onDestroyed 方法中,因为此时新的 Activity 已经创建完成
// 调用取消显示会直接新的 Activity 的 onCreate 调用显示吐司可能显示不出来的问题(立马显示然后立马消失的效果)
}
发现你新写的这个有问题,AActivity-->BActivity,点击按钮Button,跳转到CActivity,然后进行操作登录,返回到BActivity,再次点击BActivity中的Button,吐司不显示,因为在WindowHelper中记录的Activity不存在,返回在回到AActivity,同样不显示Toast内容
只要Activity没有被销毁,WindowHelper记录的Activity一定存在
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
mCurrentTag = getObjectTag(activity);
mActivitySet.put(mCurrentTag, activity);
}
@Override
public void onActivityStarted(Activity activity) {
mCurrentTag = getObjectTag(activity);
}
@Override
public void onActivityResumed(Activity activity) {
mCurrentTag = getObjectTag(activity);
}
@Override
public void onActivityDestroyed(Activity activity) {
// 移除对这个 Activity 的引用
mActivitySet.remove(getObjectTag(activity));
// 如果当前的 Activity 是最后一个的话
if (getObjectTag(activity).equals(mCurrentTag)) {
// 清除当前标记
mCurrentTag = null;
}
}
private long duration; private final int SPACE_TIME = 3000; @Override public void onBackPressed() { long now = System.currentTimeMillis(); if (now - duration > SPACE_TIME) { duration = now; ToastUtils.show("再按一次返回键关闭程序!"); return; } super.onBackPressed(); } 这么调用后发生了WindowManager: android.view.WindowLeaked: