framework de desenvolvimento apk! Visualização personalizada detalhada do Android, postagem do Android

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: 非静态内部类/匿名类 Handlermantendo Activity/Fragmentuma referência a um objeto externo , Activity/Fragemntele não foi reciclado quando foi destruído

  • solução:

    1. Altere a classe Handler para uma classe interna estática + referência fraca ( WeakReference) para conter Activityreferências (classes estáticas não mantêm referências externas por padrão)
    2. Quando a classe externa (geralmente Activity/Fragment) termina seu ciclo de vida, limpe a fila Handler
  • Razão 2: 非静态内部类的实例(对象)= 静态实例(seu ciclo de vida = ciclo de vida do aplicativo)

  • solução:

    1. Mude a classe para uma classe estática (a classe estática não contém referências externas por padrão)
    2. 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:

    1. Altere a classe de thread para a classe estática (a classe estática não contém referências externas por padrão)
    2. 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:

    1. 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:

    1. ActivityFechar / 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 = contexto contexto correspondente ao contexto Activitynão pode ser recuperado

  • solução:

    1. Tente não usar referências de variável de membro estático, use referências fracas em vez de referências fortes
    2. Use o padrão singleton

4. Outros usos

  • Razão 1: Contexto: quando Activity contexto objeto referenciado ainda está em uso, ele Activitynão pode ser reciclado quando precisa ser destruído

  • solução:

    1. A contextreferência certa não deve exceder seu ciclo de vida
    2. Use ao ApplicationContextinvés
  • 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:

    1. WebViewDestruir 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:

    1. Use em cacheconvertView
    2. Use diretamenteViewHolder

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)]

Acho que você gosta

Origin blog.csdn.net/weixin_52746928/article/details/113059782
Recomendado
Clasificación