Atrasar o carregamento de visualizações

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Às vezes, seu layout pode exigir visualizações complexas que raramente são usadas. Sejam detalhes do item, indicadores de progresso ou mensagens de reversão, você poderá reduzir o uso da memória e acelerar a renderização carregando as visualizações somente quando elas forem necessárias.

Adiar o carregamento de recursos é uma técnica importante para usar quando você tem visualizações complexas que o app pode precisar no futuro. Você pode implementar essa técnica definindo uma ViewStub para as visualizações complexas e raramente usadas.

Definir uma ViewStub

A ViewStub é uma visualização leve, sem dimensão e que não desenha nada nem participa do layout. Assim, é barato inflar e sair de uma hierarquia de visualização. Cada ViewStub só precisa incluir o atributo android:layout para especificar o layout a ser inflado.

A ViewStub a seguir é de uma sobreposição de barra de progresso translúcida. Ela precisa ficar visível apenas quando novos itens estiverem sendo importados para o app.

<ViewStub
    android:id="@+id/stub_import"
    android:inflatedId="@+id/panel_import"
    android:layout="@layout/progress_overlay"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />

Carregar o layout da ViewStub

Quando você quiser carregar o layout especificado pela ViewStub, defina a visibilidade dele chamando setVisibility(View.VISIBLE) ou inflate().

Kotlin

findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
// or
val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()

Java

findViewById(R.id.stub_import).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

Observação: o método inflate() retorna a View inflada depois de concluída. Assim, não vai ser necessário chamar findViewById() se você precisar interagir com o layout.

Depois de visível/inflado, o elemento ViewStub não faz mais parte da hierarquia de visualização. Ele é substituído pelo layout inflado, e o ID da visualização raiz desse layout é aquele especificado pelo atributo android:inflatedId da ViewStub. O ID android:id especificado para a ViewStub é válido somente até o layout dela ficar visível/inflado.

Observação: uma desvantagem da ViewStub é que ela não tem suporte à tag <merge> nos layouts a serem inflados.

Para mais informações sobre esse tópico, consulte a postagem de blog Otimizar com stubs (link em inglês).