悬浮窗-Android 通过WindowManager.addVidw创建的窗口系统是否会自动销毁?

问题描述

Android 通过WindowManager.addVidw创建的窗口系统是否会自动销毁?

如题,我做了一个类似悬浮窗的小辅助工具,设计初衷是要求在任何界面都能一直保持显示,并设计了一个开关来决定是否一直显示和隐藏。但是在运行测试的过程中发现,这个悬浮窗会在某些时候自动消失掉,但是我跟进过并log过removeView的地方,都没看到是我的误操作导致的销毁。
因此怀疑是否是系统在某些特定的环境或者情况下会自动回收这些Window的View,顺便贴下我的部分代码
WindowManager windowManager = getWindowManager(context);

int screenWidth = windowManager.getDefaultDisplay().getWidth();

int screenHeight = windowManager.getDefaultDisplay().getHeight();

if (smallWindow == null) {

smallWindow = new FloatWindowSmallView(context);
if (smallWindowParams == null) {

smallWindowParams = new LayoutParams();

smallWindowParams.type = LayoutParams.TYPE_SYSTEM_ALERT;

smallWindowParams.format = PixelFormat.RGBA_8888;

smallWindowParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
smallWindowParams.gravity = Gravity.LEFT | Gravity.TOP;

smallWindowParams.width = FloatWindowSmallView.viewWidth;

smallWindowParams.height = FloatWindowSmallView.viewHeight;

smallWindowParams.x = screenWidth;

smallWindowParams.y = screenHeight / 2;

}

smallWindow.setParams(smallWindowParams);

windowManager.addView(smallWindow, smallWindowParams);
}
}
上面部分代码是我创建的过程,希望高手给与解答。

解决方案

最后解决的办法是将APK的AndroidManifest.xml中<applicaiton属性中加入了系统属性android:persistent="true"并且将APK放到rom包systemdata下打包到rom中。这样被系统回收的概率大大降低,因此无故消失的问题也就减小概率了。
究其原因还是因为应用的优先级太低导致系统内存紧张或者在后台应用过多时系统会优先回收这部分优先级不高的应用。
具体可参考http://blog.csdn.net/zhanghaofor/article/details/41121859
希望对有此疑问的人提供帮助。

时间: 2024-08-01 20:13:15

悬浮窗-Android 通过WindowManager.addVidw创建的窗口系统是否会自动销毁?的相关文章

android悬浮窗-android写了一个悬浮窗,但是输入法显示不出来了,希望能得到朋友们的帮助,谢谢了。

问题描述 android写了一个悬浮窗,但是输入法显示不出来了,希望能得到朋友们的帮助,谢谢了. 用android编写了悬浮窗,项目是用Unity3d做的,项目中的输入法软键盘无法显示了,能接收到按键,但是软键盘看不到. windowParams的参数如下,主要的问题在flags windowParams.type = LayoutParams.TYPE_PHONE; windowParams.format = PixelFormat.RGBA_8888; windowParams.flags

Android实现桌面悬浮窗、蒙板效果实例代码

现在很多安全类的软件,比如360手机助手,百度手机助手等等,都有一个悬浮窗,可以飘浮在桌面上,方便用户使用一些常用的操作. 今天这篇文章,就是介绍如何实现桌面悬浮窗效果的. 首先,看一下效果图. 悬浮窗一共分为两个部分,一个是平常显示的小窗口,另外一个是点击小窗口显示出来的二级悬浮窗口. 首先,先看一下这个项目的目录结构. 最关键的就是红框内的四个类. 首先,FloatWindowService是一个后台的服务类,主要负责在后台不断的刷新桌面上的小悬浮窗口,否则会导致更换界面之后,悬浮窗口也会随

不依赖于Activity的Android全局悬浮窗的实现_Android

前言 当我们在手机上使用360安全卫士时,手机屏幕上时刻都会出现一个小浮动窗口,点击该浮动窗口可跳转到安全卫士的操作界面,而且该浮动窗口不受其他activity的覆盖影响仍然可见(多米音乐也有相关的和主界面交互的悬浮小窗口).那么这种不受Activity界面影响的悬浮窗口是怎么实现的呢? Android悬浮窗实现 实现基础 Android悬浮窗实现使用WindowManagerWindowManager介绍 通过Context.getSystemService(Context.WINDOW_SE

不依赖于Activity的Android全局悬浮窗的实现

前言 当我们在手机上使用360安全卫士时,手机屏幕上时刻都会出现一个小浮动窗口,点击该浮动窗口可跳转到安全卫士的操作界面,而且该浮动窗口不受其他activity的覆盖影响仍然可见(多米音乐也有相关的和主界面交互的悬浮小窗口).那么这种不受Activity界面影响的悬浮窗口是怎么实现的呢? Android悬浮窗实现 实现基础 Android悬浮窗实现使用WindowManager WindowManager介绍 通过Context.getSystemService(Context.WINDOW_S

Android 悬浮窗权限各机型各系统适配大全(总结)

这篇博客主要介绍的是 Android 主流各种机型和各种版本的悬浮窗权限适配,但是由于碎片化的问题,所以在适配方面也无法做到完全的主流机型适配,这个需要大家的一起努力,这个博客的名字永远都是一个将来时. 悬浮窗适配 悬浮窗适配有两种方法:第一种是按照正规的流程,如果系统没有赋予 APP 弹出悬浮窗的权限,就先跳转到权限授权界面,等用户打开该权限之后,再去弹出悬浮窗,比如 QQ 等一些主流应用就是这么做得:第二种就是利用系统的漏洞,绕过权限的申请,简单粗暴,这种方法我不是特别建议,但是现在貌似有些

小米-android 悬浮窗 显示问题

问题描述 android 悬浮窗 显示问题 小米最新的系统还有魅族系统 在拨打电话的时候 是不是不允许显示由手机app接听拨打电话后要显示的一个悬浮窗了 解决方案 android 悬浮窗Android悬浮窗android 悬浮窗 解决方案二: 我们公司没有小米测试机,不太清楚 解决方案三: 你的悬浮窗的flag和type足够吗,比如试试systemerror的悬浮窗,另外试试把app放到/system/app下,看看系统应用能不能显示 解决方案四: 要显示悬浮窗需要在设置里进行设置的.

迅雷极速版设置开机不启动和关闭悬浮窗的方法

  设置方法 首先,我们打开我们桌面上下载好的迅雷这个软件,打开进入主界面. 进入主界面以后,我们在右上角点击设置这个按钮 然后我们可以看到上面直接显示的有一个开机启动迅雷,我们把前面的对勾去掉就可以了 或者是我们点击设置下面的配置中心, 配置中心,我们点击上面的基本设置,就会看到开机启动迅雷这个选项. 点击之后,我们先点击应用,在点击确定就可以了. 如果要关闭迅雷的悬浮窗的话,这个极速版的和其他的版本是一样的,我们在悬浮窗上面点击右键,选择悬浮窗设置 然后再悬浮窗设置的后面我们点击上面的一直不

在当前Activity之上创建悬浮view之WindowManager悬浮窗效果

最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务WindowManager来实现此功能,本章我们来试验一下在当前Activity之上创建一个悬浮的view. 第一步:认识WindowManager 这个接口用于与 window manager (窗口管理器, 应用框架层) 进行交互. 通过getSystemService(Context.WINDOW_SERVICE)可以获取到WM的实例. 继承关系 public interface WindowManager imp

android-求助:Android ScrollView中生成windowManager桌面悬浮窗问题

问题描述 求助:Android ScrollView中生成windowManager桌面悬浮窗问题 我想在scrollView中做一个可以拖动的悬浮窗,但是拖动的时候 悬浮窗没动,ScrollView上线滑动了,请求解决办法 解决方案 Android桌面悬浮窗 解决方案二: 给窗口设置触摸监听,然后触摸的时候,让ScrollView不要拦截事件,交由窗体处理,代码如下 lv.setOnTouchListener(new View.OnTouchListener() { @Override pub