A Visualização do desenvolvedor para Android 11 já está disponível. Teste e compartilhe seu feedback.

Atraso no carregamento de visualizações

Às vezes, seu layout pode exigir visualizações complexas que raramente são usadas. Sejam detalhes do item, indicadores de progresso ou mensagens de desfazer, você pode 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 a ser usada quando você tem visualizações complexas das quais seu aplicativo pode precisar no futuro. Você pode implementar essa técnica definindo um ViewStub para as visualizações complexas e raramente utilizadas.

Definir um ViewStub

ViewStub é uma visualização leve sem dimensão 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.

O ViewStub a seguir é de uma sobreposição de barra de progresso translúcida. Ele precisa estar visível somente 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 do ViewStub

Quando você quiser carregar o layout especificado pelo ViewStub, defina-o como visível chamando setVisibility(View.VISIBLE) ou chame 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 é 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 código da visualização raiz desse layout é aquele especificado pelo atributo android:inflatedId do ViewStub. O código android:id especificado para o ViewStub só é válido até o layout ViewStub ficar visível/inflado.

Observação: uma desvantagem do ViewStub é que ele não é compatível atualmente com a 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).