当前位置: 首页 > article >正文

android.view.WindowLeaked解决方法

问题

我在使用WindowManager添加一个button, windowManager.addView(button,layoutParams);然后关闭当前的这个Activity的时候遇到了WindowLeak这个问题,也就是所谓的窗体泄露。

原因

主要原因是因为android只允许在UI主线程操作,我在使用WindowManager添加一个View,WindowManager依附于Activity,这个view依存在Activity当中,在销毁Activity的时候通过WindowManager.addView()的方法添加的View就没有了依存,导致了窗体泄露。View不能独立存在,必须依附于Window。

解决方法

一开始我在onDestroy()里面调用了removeView方法,想要移除这个View来避免窗体泄露,发现这个方法并不管用,后来换成removeViewImmediate()解决了这个问题,原因就是两个方法设计到线程同步问题,removeViewImmediate()是通知View立刻调用View.onDetachedFromWindow(),这说明这个方法是通过一个监听或者观察者来实现的,因为线程的同步跟异步问题导致activity销毁了,但view还没有被remove完,于是就产生了所谓的窗体泄露。问题解决,这两个方法也明白了又什么区别。

文章来源:安卓 android.view.WindowLeaked解决方法_android.view.windowleaked:-CSDN博客


http://www.kler.cn/a/157764.html

相关文章:

  • 使用Docker本地部署chatgpt
  • 【算法专题】前缀和
  • U2 文法和语言
  • 【Vue】使用 Vue CLI 脚手架创建 Vue 项目(使用GUI创建)
  • 8.Python TCP网络编程入门指南
  • 操作系统——进程同步
  • 如何通过Java的iTextPDF库制作一个PDF表格模板并填充数据
  • Leetcode每日一题学习训练——Python3版(从二叉搜索树到更大和树)
  • 【电机控制】PMSM无感foc控制(六)相电流检测及重构 — 双电阻采样、三电阻采样
  • 实战项目 to do
  • ai绘画Midjourney绘画提示词Prompt教程
  • 【恋上数据结构】二叉堆学习笔记
  • 非标设计之气缸类型
  • 【Node.js】笔记梳理 7 - mongoose
  • [C#]文件的读写-1
  • python3实现定时拉取rabbitmq队列里面的数据,并输出到文件中。
  • 组网技术-路由器
  • Java三种代理模式:静态代理、动态代理和CGLIB代理
  • 在Ubuntu上搭建RiscV交叉编译环境
  • 【产品经理】业务问题的诊断:由简入繁,渐进成长