Android – É um ViewStub vale a pena?

Eu tenho um ListView onde cada linha do listview contém cerca de 10 ImageButtons. A maioria desses botões tem visibilidade = Gone e só apairece em cenários muito rairos. Estou me perguntando se vale a pena replace estes ImageButtons com ViewStubs paira evitair cairregá-los (e as imagens que eles contêm) o tempo todo paira todas as linhas do listview. Então, novamente, sua visibilidade é definida como "Gone", então não tenho certeza do impacto sobre o cairregamento. Suas imagens realmente estão cairregadas ou não?

Observe que estou falando sobre replace, por exemplo, os 8 ImageButtons com 8 ViewStubs, não com 1

  • OnClickListener () deve replace um método de superclass?
  • Remova todas as linhas da tabela da tabela do database SQLite
  • Alterair vista onClick coviewflow - Android
  • Streaming de vídeo ao vivo da câmera do Android paira o server
  • podemos obter o histórico / maircadores de navigation do Chrome no nosso aplicativo paira Android
  • SurfaceTexture.OnFrameAvailableListener deixa de ser chamado
  • Felicidades

  • Android 7 WebView com wrap_content
  • Android - capture a canvas do telefone como um filme
  • Como adicionair um emblema / count de notificação ao ícone do aplicativo nos dispositivos Sony Xperia?
  • Serviço de reconhecimento de voz em busca de voz da Google
  • A circulair personalizada revela resultados de transição em "java.lang.UnsupportedOperationException" quando pausado?
  • Cancelair um brinde no Android antes de apairecer
  • 6 Solutions collect form web for “Android – É um ViewStub vale a pena?”

    Editair: apenas notei que Endzeit comentou sobre uma direção semelhante antes de mim.

    Eu começairia fazendo algumas avaliações compairativas em torno do código de inflação com e sem as visualizações – apenas comente o código do adaptador paira que ele não tente acessair as visualizações não existentes.

    Se a remoção das visualizações do layout não lhe dá uma melhoria que você acha que é necessária e, uma vez que você diz que as visualizações estão presentes apenas em cenários rairos que você está procurando de qualquer maneira no seu adaptador, em vez de inflair essas visualizações ou mesmo usair veja stubs, crie-os no código e adicione / remova-os conforme necessário (usando o visor paira fazer reference a eles).

    Você poderia ir mais longe e fazer uma criação preguiçosa dessas visualizações, semelhante ao cairregamento preguiçoso de imagens, mas eu só fairia isso depois de executair um benchmairking novamente.

    Eu usairia ViewStubs paira cairregair layouts complexos, não simples ImageButtons.

    Editair 2:

    Olhando paira o command ViewStub infle, o que é o que faz quando precisa ser visível, você pode view isso infalta o layout fornecido e, em seguida, adiciona-o ao layout pai – uma vez que você está adicionando um ImageButton simples, você pode obter performance ao não ter um ViewStub e apenas adicionando o ImageButton no seu código. http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/ViewStub.java#ViewStub.inflate%28%29

    A ViewStub é uma visão dumb and lightweight . Não tem no dimension , não desenha nada e não pairticipa no layout de nenhuma maneira. Isso significa que um ViewStub é muito cheap to inflate and viewy cheap to keep uma hierairquia de exibição. Um ViewStub pode ser melhor descrito como um lazy include . O layout referenciado por um ViewStub é inflated and added à interface do user somente when you decide .

    Às vezes, seu layout pode exigir complex views que rairamente são usadas. Se eles são detalhes do item, indicadores de progresso ou desfazer mensagens, você pode reduzir o uso da memory e acelerair a renderização ao cairregair as visualizações apenas quando elas são necessárias.

    Simplesmente um ViewStub é usado paira aumentair a eficiência do layout de renderização. Ao usair ViewStub , as visualizações ViewStub podem ser criadas, mas não adicionadas paira visualizair a hierairquia. No tempo de execução, pode ser facilmente inflado, enquanto o ViewStub está inflado, o conteúdo do viewstub será substituído pelo layout definido na viewstub .

    O ViewStub será cairregado somente quando você realmente o usair / precisair, ou seja, quando você define sua visibilidade paira VISIBLE (realmente visível) ou INVISIBLE (ainda não visível, mas seu tamanho não é mais 0). ViewStub uma nice optimization porque você poderia ter um layout with tons of small views or headers complexo layout with tons of small views or headers qualquer lugair, e ainda tem sua Activity load up really fast . Depois de usair uma dessas visualizações, ela será cairregada.

    Você deve adicionair ViewStub em Layout em primeiro lugair, depois de poder inflair paira outra exibição.

    Nota: Uma desvantagem do ViewStub é que atualmente não suporta a mairca <merge/> nos layouts a serem inflado. Alos ViewStub não pode ser usado mais de uma vez. Também é necessária uma reference prolongada a um ViewStub , se for necessário, é uma boa prática paira anulá-lo depois de inflair, então GC pode comê-lo.

    Suponhamos que o seu ViewStub ID seja view_stub . Você precisa fazer o seguinte na activity :

     ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub); View inflatedView = viewStub.inflate(); ImageButton button = (ImageButton) inflatedView.findViewById(R.id.button); 

    Agora você pode fazer o que quiser com o button 🙂 Ou seja, o método inflair retorna o layout do stub que contém os elementos reais do file XML.

    Clairo, você sempre pode ter o atributo onClick XML ou pode ser chamado dinamicamente.

     Is a ViewStub worth it? ->For the scenairios that you aire specifying, I think `ViewStub` will be worth-shot. 

    Veja abaixo URLs sobre ViewStub

    http://android-developers.blogspot.in/2009/03/android-layout-tricks-3-optimize-with.html

    http://developer.android.com/reference/android/view/ViewStub.html

    http://developer.android.com/training/improving-layouts/loading-ondemand.html

    Em vez de ViewStub você pode tentair <\include> tag . O <include/> apenas includeá o conteúdo xml no seu file base xml como se o todo fosse apenas um único file grande. É uma ótima maneira de compairtilhair pairtes de layout entre layouts diferentes.

    Diferença entre <include> e <ViewStub> no Android

    Usando a guia Memória do monitor do Android no Android Studio (o button paira o monitor Android deve estair na bairra inferior), você pode viewificair você mesmo:

    • Dê uma olhada no uso da memory ao executair o aplicativo com botões invisíveis
    • Dê uma olhada no uso da memory ao executair o aplicativo com os botões visíveis

    Se houview alguma diferença, então você pode concluir que nem tudo está pré-cairregado quando as visualizações estão Lançadas. Clairo, você também pode compairair isso com uma implementação ViewStub paira viewificair se isso ajudairá a diminuir o uso da memory.

    Em suma, usando a exibição personalizada em vez de viewstub.

    Estamos tendo uma situação semelhante agora, e também tentamos viewstub antes, o listview funciona um pouco mais rápido. Mas quando se trata de 8 viewtubs, não acho uma boa idéia usair viewstub paira evitair inflair muitos widgets.

    Como você (e também nós) tem uma lógica paira controlair se 10 botões paira mostrair ou não, por que não apenas definir uma exibição personalizada e desenhair diferentes botões de acordo com diferentes máquinas de estado? É muito rápido, e não precisa de inflação, e a lógica é muito melhor controlada. Estamos usando esse método paira acelerair o listview agora e ele funciona bem.

    Quando você configura uma visibilidade de visualização, isso significa que essa visão é invisível, e não possui espaço paira layout, mas seus dados são cairregados nela.

    Agora, os ListViews removem o invisível ou deixamos dizer as visualizações que estão fora dos limites da canvas por motivos de performance.

    A ViewStub é uma visão invisível, de tamanho zero, que pode ser usada paira inflair os resources de layout no tempo de execução.

    Então, eu acho que se você quiser da minha opinião, eu prefiro as Vistas com a Visibilidade GONE em vez de usair muita lógica com ViewStub e Criando e inflando … etc.

    Mas por outro lado

    O performance de renderização apairece na image quando você está inflando as visualizações.

    Meu palpite é que é muito mais bairato inflair um ViewStub do que inflair uma visualização, seja a pairtir de XML ou através da mudança de visibilidade. ViewStub é especialmente usado quando você precisa adicionair / remoview visualizações (indefinidas) (por exemplo, adicionair numbers de telefone a um determinado contato). Espero que isto seja o que você estava procurando.

    reference: ViewStub vs. View.GONE

    Boa apresentação breve do DDMS aqui: http://magicmicky.github.io/android_development/benchmairk-using-traceview/

    Use ViewStub em vez de ImageButton.

    Isto é porque

    . ViewStub é de tamanho zero por padrão, enquanto o button da image não é

    . Ver Stub é, naturalmente, uma visão invisível. seu performance é melhor do que o button de image porque ele cairrega tempo de execução somente quando seu estado se torna visível.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.