根据您的链接,您的应用程序可以作为服务运行而无需“正常” UI即可运行,但是我认为您链接的代码可能有些过时了.
请记住,您的服务必须在前台运行-代码在您的链接中提供,但未明确调用.如果不在前台运行,系统很可能会停止您的应用程序,而不是在后台运行它.
当我使用此类叠加创建任务切换器时,我发现有必要使用TYPE_SYSTEM_ALERT而不是TYPE_SYSTEM_OVERLAY.
我声明了没有FLAG_WATCH_OUTSIDE_TOUCH的窗口参数.
WindowManager.LayoutParams params =
new WindowManager.LayoutParams(width, height, x, y,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
您的服务还应确保在结束时从WindowManager正确注销叠加视图.否则,您的应用程序将泄漏内存.
public void onDestroy()
{
super.onDestroy();
if (overlay != null)
{
((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(overlay);
overlay = null;
}
}
我看到这是在OverlayView.destory()中完成的(请注意该方法名称的拼写不正确-为该方法使用正确的名称是一个好主意).