Prefácio
O grande homem disse uma vez:
O livro é a escada do progresso humano. Há uma
casa dourada no livro e Yan Ruyu no
livro. A leitura atravessa dez mil
livros. Se houver um deus na escrita, o livro é a única coisa imortal.
Os livros são o legado de um grande gênio para a humanidade.
Recentemente, muitos amigos fizeram perguntas semelhantes em minha conta oficial, como "Livros didáticos introdutórios clássicos e rotas de aprendizagem para desenvolvimento Android?", "Quais são as recomendações para tutoriais introdutórios de desenvolvimento Android?" E outras perguntas semelhantes. Continuamos respondendo a essas perguntas repetidamente, o que me inspirou a fazer a recomendação de livro quente de desenvolvimento 2020ndroid: da série Xiaobai-Android Senior Engineer de ideias de introdução de livro de rota de aprendizagem , organizar e coletar a experiência de aprendizagem do desenvolvimento de vacas grandes, para que possamos evitar desvios e crescer Mais rápido. Espero que este artigo possa ser uma boa resposta para todos que lidam com novatos.
Aqui, eu forneço a você um diagrama do sistema de conhecimento avançado dos arquitetos sênior do Android, e faça você mesmo!
A seguir, vou seguir este caminho para apresentá-lo. Eu e alguns amigos ao meu redor lemos livros que são bons.
O que é um vazamento de memória?
Um vazamento de memória que é ML (Memory Leak)
um fenômeno na memória do programa de aplicativo, quando a memória não precisa ser usada, mas não pode ser devolvida ao programa lançado e
Quais são os vazamentos de memória e as soluções correspondentes?
Na análise final, a causa do vazamento de memória é que quando a memória da variável que precisa ser recuperada é mantida por outras variáveis, a recuperação da memória falha.
Os motivos comuns são:
1. Classe interna não estática / classe anônima
-
Razão 1:
非静态内部类/匿名类 Handler
mantendoActivity/Fragment
uma referência a um objeto externo ,Activity/Fragemnt
ele não foi reciclado quando foi destruído -
solução:
- Altere a classe Handler para uma classe interna estática + referência fraca (
WeakReference
) para conterActivity
referências (classes estáticas não mantêm referências externas por padrão) - Quando a classe externa (geralmente
Activity/Fragment
) termina seu ciclo de vida, limpe a fila Handler
- Altere a classe Handler para uma classe interna estática + referência fraca (
-
Razão 2:
非静态内部类的实例(对象)
=静态实例
(seu ciclo de vida = ciclo de vida do aplicativo) -
solução:
- Mude a classe para uma classe estática (a classe estática não contém referências externas por padrão)
- Extraia a classe e encapsule-a como um singleton
-
Razão 3: a classe externa precisa ser destruída quando o thread de trabalho multi-threaded está processando uma tarefa. Nesse momento, o thread de trabalho contém uma referência à classe externa e não pode ser reciclado
-
solução:
- Altere a classe de thread para a classe estática (a classe estática não contém referências externas por padrão)
- Força o fim do thread quando a classe externa terminar seu ciclo de vida
2. Coleção
-
Motivo: a classe de coleção contém uma referência ao elemento de coleção após adicionar um elemento, o que faz com que o elemento de coleção seja incobrável, resultando em um vazamento de memória
-
solução:
- Depois que a classe de coleção usa o objeto de elemento, o elemento deve ser excluído da coleção (porque existem vários elementos em uma coleção, a solução mais simples é esvaziar o objeto de coleção (limpar) e definir como Nulo)
3. O objeto de recurso não é fechado após o uso
-
Causa: O objeto de recurso não está fechado após o uso, não há off / log off quando esses recursos são destruídos Activity / Fragemnt, não vai levar a recuperação, tais como:
广播BraodcastReceiver
,文件流Fire
,图片资源Bitmap
,数据库游标
etc. -
solução:
Activity
Fechar / cancelar o registro em tempo hábil quando destruído
4. A palavra-chave estática modifica as variáveis de membro
-
O motivo: a palavra-chave estática modificada do membro da variável ciclo de vida = aplicativos do ciclo de vida, por exemplo,
private static Context mContext = context
o contexto correspondente ao contextoActivity
não pode ser recuperado -
solução:
- Tente não usar referências de variável de membro estático, use referências fracas em vez de referências fortes
- Use o padrão singleton
4. Outros usos
-
Razão 1: Contexto: quando
Activity context
o objeto referenciado ainda está em uso, eleActivity
não pode ser reciclado quando precisa ser destruído -
solução:
- A
context
referência certa não deve exceder seu ciclo de vida - Use ao
ApplicationContext
invés
- A
-
Razão 2: WebView: o objeto WebView não é destruído a tempo depois de não ser mais usado, resultando em uso de memória
-
solução:
WebView
Destruir objetos que não são mais usados por meio de vários threads
-
Razão 3: Adaptador: ao deslizar ListView e RecycleView para obter uma nova View, um objeto View é reinstanciado em getView (), o que desperdiça recursos e torna o uso de memória cada vez maior
-
solução:
- Use em cache
convertView
- Use diretamente
ViewHolder
- Use em cache
Além de flutter, o que mais deve ser dominado no desenvolvimento Android?
Acredito que a maioria dos amigos que estão envolvidos no desenvolvimento do Android descobrem que está cada vez mais difícil encontrar um emprego e que os requisitos para entrevistas estão cada vez mais altos.
Além de um conhecimento básico sólido de java, algoritmos de estrutura de dados e padrões de design, o código-fonte subjacente, tecnologia NDK, ajuste de desempenho e alguns pequenos programas e plataformas cruzadas, como flutter, são mostrados na figura abaixo como um mapa mental;
Clique no documento para obter materiais de entrevista e tutoriais em vídeo; [mapa mental técnico do arquiteto Android de nível Ali P7 + conjunto completo de vídeos]
9D% A2% E8% AF% 95% E6% 8B% BF% E9% AB% 98% E8% 96% AA% EF% BC% 81.md) **
[A imagem do link externo está sendo transferida ... (img-xYPrZ6zZ-1611397302162)]