Sobes.tech
Middle+

Чӣ гуна LeakCanary ишораҳоро ба Activity-ҳои нобудкардашударо муайян мекунад?

sobes.tech AI

Ҷавоб аз AI

LeakCanary әлсіз (Phantom Reference) немесе күшті (Strong Reference) сілтемені арнайы бақылаушыда пайдаланады, ол "тыңдайды" Activity-нің өмірлік циклін. Activity жойылғанда, LeakCanary уақытты тіркейді және қоқыс жинауды күтеді. Егер қоқыс жинаудан кейін Activity объектісі әлі де жадта болса, LeakCanary жадты түсіру (heap dump) бастайды, оны талдайды және GC Roots-тан осы "ағып кеткен" Activity-ге жету жолын табу үшін қол жетімділік графигін құрады.

Негізгі қадамдар:

  1. Өмірлік циклді бақылау: LeakCanary ActivityLifecycleCallbacks-ты тіркейді.
  2. Белгілеу (Bookmarking): onDestroy() шақырылғанда, LeakCanary Activity-ге сілтеме жасайды (нұсқаға байланысты) және уақытты тіркейді.
  3. GC-ны күту: LeakCanary қоқыс жинау орын алғанын тексеру үшін күтеді.
  4. GC-дан кейінгі тексеру: Егер Activity объектісі GC-дан кейін әлі де қол жетімді болса, бұл потенциалды ағызуды көрсетеді.
  5. Heap dump: LeakCanary Debug.dumpHprofData()-ны шақырады, ол ағымдағы жад күйін сақтайды.
  6. Түсіндірмені талдау: LeakCanary (Memory Analyzer Tool (MAT) немесе өз анализаторы арқылы) жад түсіндірмесін сканерлейді.
  7. Жолды іздеу: Құрал GC Roots-тан "ағып кеткен" объектке дейінгі жолдарды табады.
  8. Есеп: LeakCanary оқылатын есеп жасайды, ол объектіні қоқыс жинаудан ұстап тұратын сілтеме тізбегін көрсетеді.