O Android WindowManager é um serviço de sistema, responsável pelo gerenciamento da lista de Windows ordenada por Z, que as janelas são visíveis e como elas são colocadas na tela. Entre outras coisas, ele executa automaticamente transições e animações de janela ao abrir ou fechar um aplicativo ou girar a tela.
Toda atividade possui uma janela usada para exibir seu conteúdo na tela. Quando você chama o setContentView em uma atividade, ele anexa essa visualização à janela padrão da atividade. A janela padrão preenche a tela, para que a janela da sua atividade ocorra outras atividades - o WindowManager exibirá a janela que estiver na parte superior. Portanto, normalmente você não precisa se preocupar com o Windows - basta criar uma atividade e o Android fará o resto por você.
Mas você precisa interagir com o WindowManager se quiser fazer algo incomum como criar janelas flutuantes que não preenchem a tela. Se você deseja criar uma janela flutuante visível na frente de outras aplicações, não pode usar uma atividade porque sua atividade parará quando outro aplicativo chegar ao primeiro plano e sua janela será escondida ou destruída. Em vez disso, você precisa exibir uma janela de um serviço de segundo plano. Por exemplo:
WindowManager.LayoutParams p = new WindowManager.LayoutParams(
// Shrink the window to wrap the content rather than filling the screen
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
// Display it on top of other application windows, but only for the current user
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
// Don't let it grab the input focus
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
// Make the underlying application window visible through any transparent parts
PixelFormat.TRANSLUCENT);
// Define the position of the window within the screen
p.gravity = Gravity.TOP | Gravity.RIGHT;
p.x = 0;
p.y = 100;
WindowManager windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
windowManager.addView(myView, p);
Para que isso funcione, você precisará adicionar a seguinte permissão ao seu AndroidManifest.xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>