aprender com os erros! Levam você a entender completamente o processo de desenho do View, a série Android de vídeos de aprendizado avançado

fundo

Como de costume, vamos resumir os meus. Nasci em 1991, trabalhei em Shenzhen depois de me formar em três livros em 164, uma pequena empresa, um salário de 13 mil, sem casa, sem carro e sem residência.

Naquela época, eu achava que a vida estava bem. Meus pais tinham pensão. Basicamente, eu não precisava me preocupar muito. Minhas amigas estavam juntas há muito tempo e eram muito atenciosas. Não me perguntavam muito.

Fiquei satisfeito quando minha vida estava indo bem, mas no início do ano passado, algo aconteceu com a casa da minha namorada e eu dei a ela todas as economias. Depois que a epidemia veio, minha família começou a pedir pelo casamento e eu senti o pressão.

Os salários atuais não podem satisfazer a vida. Embora tenha havido um ligeiro aumento ao longo dos anos, os preços da habitação e dos preços subiram mais rápido, então decidi parar.

Comecei a lançar meus currículos desde o final do ano passado. Olhando para trás, eu elenco um total de 33 currículos. Apenas 3 empresas estão interessadas, e 0 delas entrevistou.

(Fiquei muito triste no começo, mas depois ... me acostumei depois)

Depois, passei um tempo e de repente percebi que, fosse o inverno econômico ou o meu inverno, tudo estava aqui.

Entrevistador : Fale-me sobre o mecanismo de coleta de lixo

Eu: ... posso resolver o problema de referência circular da contagem de referência por meio da combinação da contagem de referência forte e fraca. Na verdade, o ponteiro inteligente do Android é implementado assim ...

Apontador inteligente

Os ponteiros inteligentes são amplamente usados ​​em todo o projeto Android. Você pode ver as referências dos tipos sp e wp no código-fonte relacionado ao fichário:

 sp<IBinder> result = new BpBinder(handle);

 wp<IBinder> result = new BpBinder(handle);

sp é uma referência de ponteiro forte; wp é uma referência de ponteiro fraca.

Em Java, não precisamos nos preocupar com a destruição de objetos e liberação de memória. O mecanismo de GC identificará e reciclará automaticamente objetos inúteis e os ponteiros inteligentes são uma pequena implementação de GC na camada nativa.

Os ponteiros inteligentes identificam objetos inúteis por contagem de referência. Os objetos que usam ponteiros inteligentes precisam herdar de RefBase. RefBase mantém o número de referências fortes e referências fracas desse objeto.

O ponteiro forte sp sobrecarrega o operador "=". Ao se referir a outros objetos, a contagem de referência forte é +1 e a contagem de referência forte é -1 no destruidor sp. Quando a contagem de referência forte é reduzida a 0, o referenciado objeto é destruído.Desse modo, a liberação automática do objeto é realizada.

Quando um ponteiro fraco se refere a outros objetos, a contagem de referência fraca é +1 e a contagem de referência fraca é -1 no destruidor wp. Quando a contagem de referência forte é 0, o objeto referenciado será destruído independentemente de a referência fraca a contagem é 0 ou não.

Como resolver o problema da referência circular

Apenas confiar no método de contagem de referência forte terá o problema de referências circulares, o que fará com que o objeto nunca seja liberado. Referências fracas são usadas especificamente para resolver o problema de referências circulares:

Se A se refere fortemente a B, então B precisa usar referências fracas ao fazer referência a A. Ao julgar se é um objeto inútil, apenas a contagem de referência forte é considerada 0, e o número de contagens de referência fraca não é considerado.

Isso resolve o problema de que o objeto não pode ser liberado devido à referência circular, mas causará o problema do ponteiro selvagem: quando B deseja acessar A por meio de um ponteiro fraco, A pode ter sido destruído e o ponteiro fraco para A torna-se um ponteiro selvagem para cima. Nesse caso, significa que A não existe mais e outras operações, como recriação, são necessárias.

Regras de personalização de ponteiro inteligente

Os ponteiros inteligentes não são fixos "quando a contagem de referência forte é 0, o objeto referenciado será destruído independentemente de a contagem de referência fraca ser 0", mas as regras podem ser personalizadas. RefBase fornece o método extendObjectLifetime (), que pode ser usado para definir as regras do contador de referência. Regras diferentes têm julgamentos diferentes sobre o tempo de exclusão do objeto de destino, incluindo as três regras a seguir:

  • OBJECT_LIFETIME_STRONG: O objeto será destruído apenas quando o valor do contador forte no espaço de memória deste objeto for 0

  • OBJECT_LIFETIME_WEAK: O objeto será destruído apenas quando os valores do contador forte e do contador fraco no espaço de memória deste objeto forem ambos 0

  • OBJECT_LIFETIME_MASK: Independentemente de os dois contadores serem 0, o objeto não é destruído, ou seja, é o mesmo que um ponteiro normal, ou você deve liberar manualmente o objeto sozinho

Finalmente

Por fim, aqui estão as informações que revisei durante este período. Essas informações também foram compartilhadas por um amigo por acaso. Contém a análise das perguntas reais das entrevistas de Tencent, ByteDance, Ali e Baidu em 2020-2021, e organiza cada técnica Torne-se um vídeo e PDF (contexto de conhecimento + muitos detalhes).

Há também  mapas mentais avançados de tecnologia de arquitetura e materiais de arquitetura avançada para  ajudá-lo a aprender e avançar. Aqui, também compartilho com você gratuitamente e economizo seu tempo ao pesquisar informações na Internet para aprender, ou você pode compartilhá-lo com amigos ao seu redor para aprendermos juntos.

Amigos necessitados podem clicar em: ** Informações da entrevista do Android ** Obtenha gratuitamente ~

Vamos encorajar uns aos outros ~

613960897049)]

[A imagem do link externo está sendo transferida ... (img-W6OT0pUf-1613960897053)]

Vamos encorajar uns aos outros ~

Acho que você gosta

Origin blog.csdn.net/a120464/article/details/113930873
Recomendado
Clasificación