文档章节

使用 PopupWindow 的时候遇到Activity com.avcit… has leaked

BravoZu
 BravoZu
发布于 2013/12/27 23:41
字数 391
阅读 2647
收藏 4

在OnCreate方法中调用

popupWindow.showAtLocation(view, Gravity.LEFT | Gravity.TOP, x, y);

时,会出现以下错误:

Activity com.avcit.conference.MainActivity has leaked window android.widget.PopupWindow$PopupViewContainer@406dfc10 that was originally added here  

android.view.WindowLeaked: Activity com.avcit.conference.MainActivity has leaked window android.widget.PopupWindow$PopupViewContainer@406dfc10 that was originally added here

这是因为这个popupWindow依赖的父Activity已经finish()的了,但是它还存在,所以回有上面的提示。 有两种解决办法:

(1)在onPause()中将它dismiss()了。

<!-- lang: java -->

@Override
	    protected void onPause() {
	    	// TODO Auto-generated method stub
	    	super.onPause();
	    	dismissPopupWindow();
	    	//if(popupWindow != null)
	    }
      
   //判断PopupWindow是不是存在,存在就把它dismiss掉  
    private void dismissPopupWindow() {

    	if(popupWindow != null){
    		popupWindow.dismiss();
    		popupWindow = null;
    	}
	}

(2)重新使用一个线程来跑这个popupWindow:

<!-- lang: java -->
 handler.post(new Runnable() {
					@Override
					public void run() {
						int [] location = new int[2];
						view.getLocationInWindow(location);
						View popupView = View.inflate(AppManagerActivity.this, R.layout.popup_item, null);
						LinearLayout ll_app_uninstall = (LinearLayout) popupView.findViewById(R.id.ll_app_uninstall);  
			            LinearLayout ll_app_run = (LinearLayout) popupView.findViewById(R.id.ll_app_start);  
			            LinearLayout ll_app_share = (LinearLayout) popupView.findViewById(R.id.ll_app_share);  
			            ll_app_run.setOnClickListener(AppManagerActivity.this);
			            ll_app_uninstall.setOnClickListener(AppManagerActivity.this); 
			            ll_app_share.setOnClickListener(AppManagerActivity.this); 
			            
			            //拿到当前点击的条目,并设置到view里面
			            AppInfo info = (AppInfo) lv_app_manager.getItemAtPosition(position);
			            ll_app_uninstall.setTag(info);  
		                ll_app_run.setTag(info);  
		                ll_app_share.setTag(info); 
		                
		                //添加动画  
		                LinearLayout ll_app_popup = (LinearLayout) popupView.findViewById(R.id.ll_app_popup);  
		                ScaleAnimation scaleAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f);  
		                scaleAnimation.setDuration(300);  
						 //new 一个PopupWindow出来  
		                popupWindow = new PopupWindow(popupView, 230, 70);  
		                //一定要给PopupWindow设置一个背景图片,不然的话,会有很多未知的问题的  
		                //如没办法给它加上动画,还有显示会有问题等,  
		                //如果我们没有要设置的图片,那么我们就给它加上了一个透明的背景图片  
		                Drawable drawable = new ColorDrawable(Color.TRANSPARENT);  
		                popupWindow.setBackgroundDrawable(drawable);  
		                
		                int x = location[0] + 60;  
		                int y = location[1];  
		                //把PopupWindow显示出来  
		                popupWindow.showAtLocation(view, Gravity.LEFT | Gravity.TOP, x, y);  
		                //开启动画 
		                ll_app_popup.startAnimation(scaleAnimation); 
					}
				});

© 著作权归作者所有

共有 人打赏支持
BravoZu
粉丝 12
博文 54
码字总数 34332
作品 0
广州
程序员
关于android.view.WindowLeaked异常的解决方案

虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考。 Android.view.WindowLeaked按字面了解,Window Leaked大概就是说一个窗体泄漏了,也就是我...

程序袁_绪龙
2014/11/29
0
0
使用 PopupWindow 的注意事项

预备知识 使用 PopupWindow 之前, 一定要知道 Android 是怎么响应旋转屏幕的. 如果不知道的话, 那就先去了解下这个知识点. >>> Google 关键词: Android Activity 重建 另外需要知道的就是Pop...

有初啊
2013/11/07
0
2
Android开发中遇到的exception

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lam.fundamental/com.lam.datasave.dairy.DairyActivity}: java.lang.RuntimeException: Your content must have ......

ice_col
2015/08/11
0
0
Android开发中积累的一些报错的解决方法

1.报错: The connection to adb is down, and a severe error has occured. [2012-03-11 09:36:56 - Camera] You must restart adb and Eclipse. [2012-03-11 09:36:56 - Camera] Please en......

IT丶小生
2014/04/21
0
0
Android:PopupWindow

一、概述 1、构造方法 部分常用: PopupWindow(View contentView, int width, int height)Create a new non focusable popup window which can display the contentView.PopupWindow(View c......

Xushao
2013/12/16
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部