企鹅不飞 2014-10-23 07:58 采纳率: 0%
浏览 4137

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);
}
}
上面部分代码是我创建的过程,希望高手给与解答。

  • 写回答

1条回答 默认 最新

  • 企鹅不飞 2014-11-14 10:13
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序