企鹅不飞 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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料