Primeiro de tudo, confira meu post sobre fragmentos retidos. Isso pode ajudar.
Agora, para responder às suas perguntas:
O fragmento também mantém seu estado de exibição , ou isso será recriado na alteração da configuração - o que exatamente é "retido"?
Sim, o Fragmentestado do será retido durante a alteração da configuração. Especificamente, "retido" significa que o fragmento não será destruído nas alterações de configuração. Ou seja, a retençãoFragment será mantida mesmo se a alteração na configuração fizer com que o subjacente Activityseja destruído.
O fragmento será destruído quando o usuário sair da atividade?
Assim como Activitys, Fragments pode ser destruído pelo sistema quando os recursos de memória estão baixos. Se seus fragmentos mantêm seu estado de instância nas alterações de configuração, não terá efeito se o sistema destruirá os sistemas Fragmentassim que você sair Activity. Se você sair do Activity(ou seja, pressionando o botão home), os Fragments podem ou não ser destruídos. Se você sair Activitypressionando o botão voltar (assim, chamando finish()e destruindo efetivamente o Activity), todos os Activitys anexados Fragmenttambém serão destruídos.
Por que não funciona com fragmentos na pilha traseira?
Provavelmente, existem várias razões pelas quais não é suportado, mas a razão mais óbvia para mim é que o Activitydetém uma referência ao FragmentManagere FragmentManagergerencia o backstack. Ou seja, não importa se você optar por manter seus Fragmentou não, o Activity(e, portanto, o FragmentManagerbackstack) será destruído em uma alteração na configuração. Outra razão pela qual isso pode não funcionar é que as coisas podem ficar complicadas se os fragmentos retidos e os não retidos puderem existir no mesmo backstack.
Quais são os casos de uso em que faz sentido usar esse método?
Fragmentos retidos podem ser bastante úteis para propagar informações de estado - especialmente gerenciamento de encadeamentos - entre instâncias de atividade. Por exemplo, um fragmento pode servir como host para uma instância de Threadou AsyncTask, gerenciando sua operação. Veja minha postagem no blog sobre este tópico para obter mais informações.
Em geral, eu o trataria da mesma forma que o uso onConfigurationChangedcom um Activity... não o use como um bandaid apenas porque você é muito preguiçoso para implementar / lidar com uma alteração de orientação corretamente. Use-o somente quando precisar.