¡aprender de los errores! Lo lleva a comprender completamente el proceso de dibujo de View, la serie de videos de aprendizaje avanzado de Android

antecedentes

Como de costumbre, mencionemos brevemente el mío: nací en 1991, trabajé en Shenzhen después de graduarme de tres libros en 164, una pequeña empresa, un salario de 13k, sin casa, sin automóvil y sin residencia.

En ese momento sentía que la vida estaba bien, mis padres tenían pensiones, básicamente no tenía que preocuparme demasiado, mis amigas llevaban mucho tiempo juntas y eran muy consideradas, no me pedían mucho.

Me sentí satisfecho cuando mi vida iba bien, pero a principios del año pasado, algo le pasó a la casa de mi novia y le di todos los ahorros. Después de que llegó la epidemia, mi familia comenzó a instar al matrimonio y sentí la presión.

Los salarios actuales no pueden satisfacer la vida, aunque ha habido un ligero aumento a lo largo de los años, los precios de la vivienda y los precios han subido más rápido, así que decidí renunciar.

Desde finales del año pasado, comencé a emitir mis currículums. Mirando hacia atrás, he emitido un total de 33 currículums. Solo 3 empresas están interesadas y 0 de ellas se han entrevistado.

(Estaba muy triste al principio, pero luego ... me acostumbré más tarde)

Luego pasé un tiempo, y de repente me di cuenta de que si era el invierno económico o mi invierno, todo estaba aquí.

Entrevistador : Cuénteme sobre el mecanismo de recolección de basura

Yo: ... puedo resolver el problema de referencia circular del recuento de referencias mediante la combinación del recuento de referencias fuertes y débiles. De hecho, el puntero inteligente de Android se implementa así ...

Puntero inteligente

Los punteros inteligentes se utilizan ampliamente en todo el proyecto de Android. Puedes ver las referencias de los tipos sp y wp en el código fuente relacionado con el binder:

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

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

sp es una referencia de puntero fuerte; wp es una referencia de puntero débil.

En Java, no necesitamos preocuparnos por la destrucción de objetos y la liberación de memoria. El mecanismo de GC identificará y reciclará automáticamente los objetos inútiles, y los punteros inteligentes son una pequeña implementación de GC en la capa nativa.

Los punteros inteligentes identifican objetos inútiles mediante el recuento de referencias. Los objetos que usan punteros inteligentes deben heredar de RefBase. RefBase mantiene el número de referencias fuertes y referencias débiles de este objeto.

El puntero fuerte sp sobrecarga el operador "=". Cuando se hace referencia a otros objetos, el recuento de referencias fuertes es +1 y el recuento de referencias fuertes es -1 en el destructor sp. Cuando el recuento de referencias fuertes se reduce a 0, la referencia El objeto se destruye De esta manera, se realiza la liberación automática del objeto.

Cuando un puntero débil se refiere a otros objetos, el recuento de referencias débiles es +1 y el recuento de referencias débiles es -1 en el destructor wp. Cuando el recuento de referencias fuertes es 0, el objeto referenciado se destruirá independientemente de si la referencia débil el recuento es 0 o no.

Cómo resolver el problema de referencia circular

Solo confiar en el método de recuento de referencias fuertes tendrá el problema de las referencias circulares, lo que hará que el objeto nunca se libere.Las referencias débiles se utilizan específicamente para resolver el problema de las referencias circulares:

Si A se refiere fuertemente a B, entonces B necesita usar referencias débiles al hacer referencia a A. Al juzgar si es un objeto inútil, solo el recuento de referencias fuertes se considera 0, y el número de recuentos de referencias débiles no se refiere.

Esto resuelve el problema de que el objeto no se puede liberar debido a la referencia circular, pero causará el problema del puntero salvaje: cuando B quiere acceder a A a través de un puntero débil, A puede haber sido destruido y el puntero débil a A se convierte en un puntero salvaje Arriba. En este caso, significa que A ya no existe y se necesitan otras operaciones como la recreación.

Reglas de personalización del puntero inteligente

Los punteros inteligentes no son fijos "cuando el recuento de referencias fuertes es 0, el objeto referenciado se destruirá independientemente de si el recuento de referencias débiles es 0", pero las reglas se pueden personalizar. RefBase proporciona el método extendObjectLifetime (), que se puede usar para establecer las reglas del contador de referencia. Diferentes reglas tienen diferentes juicios sobre el momento de eliminar el objeto de destino, incluidas las siguientes tres reglas:

  • OBJECT_LIFETIME_STRONG: El objeto se destruirá solo cuando el valor del contador fuerte en el espacio de memoria de este objeto sea 0

  • OBJECT_LIFETIME_WEAK: El objeto se destruirá solo cuando los valores del contador fuerte y del contador débil en el espacio de memoria de este objeto sean ambos 0

  • OBJECT_LIFETIME_MASK: Independientemente de si los dos contadores son 0, el objeto no se destruye, es decir, es lo mismo que un puntero normal, o tienes que liberar manualmente el objeto por ti mismo

Por fin

Finalmente, aquí está la información que revisé durante este período. Esta información también fue compartida por un amigo por accidente. Contiene el análisis de las preguntas reales de la entrevista de Tencent, ByteDance, Ali y Baidu en 2020-2021, y organiza cada técnica punto. Conviértase en un video y PDF (contexto de conocimiento + muchos detalles).

También hay  mapas mentales avanzados de tecnología de arquitectura avanzada y materiales de arquitectura avanzada avanzada para  ayudarlo a aprender y avanzar. Aquí también lo comparto con usted de forma gratuita y le ahorro tiempo buscando información en Internet para aprender, o puede compartirlo con amigos a tu alrededor para aprender juntos.

Los amigos que lo necesiten pueden hacer clic en: ** Información de la entrevista de Android ** Consíguela gratis ~

Animémonos unos a otros ~

613960897049)]

[La imagen del enlace externo se está transfiriendo ... (img-W6OT0pUf-1613960897053)]

Animémonos unos a otros ~

Supongo que te gusta

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