2 zhanghaofor zhanghaofor 于 2014.10.23 15:58 提问

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个回答

zhanghaofor
zhanghaofor   2014.11.14 18:13

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!