Je třeba mít na paměti, že zatímco tento nástroj může být velmi užitečný pro nalezení odkazů na podezřelý únik, jeho použití pro nalezení neznámých úniků může být poměrně obtížné a složité a vyžaduje poměrně dlouhou analýzu. Přesto, pokud jej zvládnete – je to skvělý nástroj, který můžete mít pod palcem!
LeakCanary
Dalším způsobem, jak najít úniky paměti, je použití knihovny Leak Canary vytvořené společností Square, která vám pomůže odhalit úniky paměti. Funguje pomocí třídy ObjectWatcher
, která uchovává slabé reference na zničené objekty v haldě. Pokud není reference vymazána v následujících pěti sekundách a Garbage Collector se spustil, objekt je považován za zachovaný a zaznamená to jako potenciální únik paměti v logcatu. Docela chytré, co?“
Chcete-li začít, jednoduše přidejte knihovnu uvnitř závislostí do souboru build.gradle, synchronizujte a zkompilujte.
Jakmile spustíte aplikaci, můžete v logcatu vidět výstup LeakCanary, jak sleduje instance a uchovává objekty. Pro spuštění úniku jsem do aplikace TaskManager přidal několik nových úloh. Netrvalo dlouho a od LeakCanary jsem dostal toto oznámení, které indikuje potenciální únik!
Pro prozkoumání potenciálního úniku stačí kliknout na oznámení „dump heap“ a v aplikaci se zobrazí tento dialog.
Leak Canary pak analyzuje haldu prostřednictvím lokalizace zachovaných objektů a najde stopu úniku, což je cesta odkazů na každý zachovaný objekt. Po dokončení se zobrazí oznámení shrnující počet zadržených objektů a úniků.