Prefácio
A P&D móvel está em alta, e mais e mais pessoas estão começando a aprender o desenvolvimento do Android. No entanto, muitas pessoas acham que é fácil começar e que é difícil crescer. Elas estão um tanto confusas quanto ao futuro. Não sabem como melhorar suas habilidades e o que precisa ser adicionado à próxima fase. O mercado também está falando principalmente de gráficos de conhecimento, sem um sistema e um senso de ritmo de crescimento. Eu, por meio deste, compilar um caminho avançado para P&D Android, espero que possa ser útil para todos.
Aqui, divido o cerco em quatro estágios: elementar, intermediário, avançado e sênior, e faço requisitos para P&D e recursos de design, uso de ferramentas, princípios de sistema e arquitetura.
ByteDance fez esta pergunta em três lados. Eu resolvi isso aqui. Espero que possa ajudar a todos. Bem-vindo para verificar e preencher as vagas.
Separação de processamento de dados e visualização de carregamento
Sabemos que extrair dados do remoto deve ser assíncrono. Depois de extrairmos os dados, podemos enviar rapidamente os dados para o VH para processamento. Na verdade, também devemos colocar a lógica de processamento de dados em processamento assíncrono, para que após a notificação do adaptador a mudança, ViewHolder pode fazer dados e visualizar a lógica de ligação de forma simples e sem pressão, como:
mTextView.setText(Html.fromHtml(data).toString())
O método Html.fromHtml (data) aqui pode ser mais demorado. Se houver vários TextViews, o tempo será mais sério, o que causará quedas e congelamentos de quadros. Se você colocar esta etapa junto com o thread assíncrono da rede Do ponto de vista do usuário, o tempo de atualização da rede é um pouco mais longo, no máximo.
Otimização de dados
Extraia dados remotos por paginação, armazene em cache os dados remotos extraídos, melhore a velocidade do carregamento secundário; para dados recém-adicionados ou excluídos, use DiffUtil para atualizar os dados localmente em vez de atualizar cegamente os dados globalmente.
Otimização de layout
Reduza o desenho de transição
Para reduzir o nível de layout, você pode considerar o uso de uma Visualização personalizada para reduzir o nível ou definir o layout de forma mais razoável para reduzir o nível. Não é recomendado usar ConstraintLayout no RecyclerView. Muitos desenvolvedores já relataram que usá-lo é ainda pior Os links relacionados são: ConstraintLayout tão lento ?, constraintlayout 1.1.1 não funciona bem em listview.
Reduz o tempo de aumento do arquivo xml
O arquivo xml aqui inclui não apenas o xml do layout, mas também o xml do drawable. O arquivo xml aumenta o ItemView por meio de operações IO demoradas, especialmente quando a probabilidade de reutilização do item é muito baixa, conforme o tipo aumenta , este A perda causada pelo inflate é bastante grande. Neste momento, podemos usar o código para gerar o layout, ou seja, o novo método View (), desde que descubramos a API correspondente aos atributos de cada nó em o xml.
Reduz a criação de objetos View
Um item ligeiramente complexo conterá um grande número de visualizações, e a criação de um grande número de visualizações também consumirá muito tempo, então o ItemView deve ser simplificado o máximo possível; ao projetar o ItemType, projete a parte que pode ser compartilhado por múltiplos ViewTypes tanto quanto possível para projetar uma visualização personalizada para reduzir a construção e o aninhamento da visualização.
outro
Outros não significam que não sejam importantes, mas não posso classificá-los.Algumas operações podem otimizar muito seu RecyclerView.
- Atualize a versão do RecycleView para 25.1.0 e superior para usar a função Prefetch; consulte a pré-busca de dados do RecyclerView.
- Se a altura do item for fixa, você pode usar RecyclerView.setHasFixedSize (true); para evitar o desperdício de recursos de requestLayout;
- Defina RecyclerView.addOnScrollListener (listener); para interromper a operação de carregamento durante o processo de deslizamento.
- Se a animação não for necessária, você pode passar ((SimpleItemAnimator) rv.getItemAnimator ()). SetSupportsChangeAnimations (false); desligar a animação padrão para melhorar a eficiência.
- Use String.toUpperCase para TextView em vez de android: textAllCaps = "true".
- Em vez disso, use a visualização personalizada de StaticLayout ou DynamicLayout para TextView.
- Recicle recursos substituindo RecyclerView.onViewRecycled (holder).
- Use RecycleView.setItemViewCacheSize (size); para aumentar o cache de RecyclerView e use espaço para tempo para melhorar a suavidade da rolagem.
- Se o adaptador de vários RecycledViews for o mesmo, por exemplo, o mesmo adaptador existe no RecyclerView aninhado, você pode compartilhar um RecycledViewPool definindo RecyclerView.setRecycledViewPool (pool) ;.
- Configure um ouvinte para ItemView. Não chame addXxListener para cada item. Você deve compartilhar um XxListener e executar diferentes operações com base no ID, o que otimiza o consumo de recursos causado pela criação frequente de objetos.
- Use getExtraLayoutSpace para aumentar o espaço extra reservado pelo RecyclerView (fora do intervalo de exibição, deve haver espaço de cache extra), conforme mostrado abaixo:
new LinearLayoutManager(this) {
@Override protected int getExtraLayoutSpace(RecyclerView.State state) {
return size;
}
};
Finalmente
Levando em conta a extensão do artigo, fiz essas perguntas e respostas, bem como as perguntas que encontrei em muitos anos de entrevistas, e alguns materiais de entrevista em documentos PDF. Se você precisar de um amigo, pode me enviar um e-mail em particular [Entrevista ] para recebê-lo de graça
Clique aqui para receber um resumo dos materiais de entrevista do Android
mg-lbxroUhK-1614050724720)]
[A imagem do link externo está sendo transferida ... (img-jHECy98f-1614050724723)]
Amigos que curtirem podem seguir, encaminhar e curtir obrigado!