我想创建一个覆盖,是可见的所有时间,在每一个其他的应用程序。我使用下面的代码按钮点击在我的活动
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT
);
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(myViewGroup, params);
它工作,但它给了我一个错误,当我退出应用程序:
E/WindowManager(17254): android.view.WindowLeaked:
Activity com.myPackage.myApp.MainActivity has leaked window
com.myPackage.myApp.MainActivity$myViewGroup{4269d670 V.E..... ........ 0,0-1024,1024}
that was originally added here
如何避免这个错误?
技巧是使用getApplicationContext().getSystemService(WINDOW_SERVICE)
。
当您简单地使用getSystemService(WINDOW_SERVICE)
时,您正在使用活动的上下文。当您退出活动时,此上下文不再存在,因此它将导致窗口泄漏错误。