całość opiera się na dodawaniu nowej warstwy do WindowManager podobnie jak się to dzieje w przypadku Aktywności czy innego elementu UI z tą różnicą ze nie jesteś ograniczony do formy i zasad jakimi rządzi się Aktywność czy inny element UI przykładowo Toast
WindowManager mWindowManager = (WindowManager) Context.getSystemService(Context.WINDOW_SERVICE);
//dodajesz View
mWindowManager.addView(View, WindowManager.LayoutParams);
usuwasz View
mWindowManager.removeView(View);
dzkieki temu usługa pracujaca w tle moze wyswietlacz okna nad innymi aktywnosciami
najważniejsze są parametry View to one decydują o zachowaniu okna przykładowo czy moze przechwytywać zdarzenia
new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,PixelFormat.TRANSLUCENT);
przykład warstwy pełnoekranowej przechwytującej wszystkie zdarzenia, w tym przypadku potrzebne jest uprawnienie
android.permission.SYSTEM_ALERT_WINDOW