2015-07-10 6 views
25

Próbuję użyć LeakCanary do wykrywania wycieków pamięci w mojej aplikacji, ale nie wykracza poza komunikat "Dumping pamięci, aplikacja będzie zamarzać." Brrr. " Czekam około 20 minut, ale bez zmian. Samo zachowanie na tych urządzeniach: 1. Asus Fonepad 8 (Android 5.0 Stock) 2. Sony Xperia SP (Android 5.1.1 CM 12,1 niestandardowy) 3. HTC Desire C (Android 4.4 CM 11 zwyczaj)Utknął w "Dumping pamięci, aplikacja będzie zamarzać." Brrr. " wiadomość

I zrobiłem wszystko jak sama poinformowała w instrukcji:

public class ExampleApplication extends Application { 

    @Override public void onCreate() { 
    super.onCreate(); 
    LeakCanary.install(this); 
    } 
} 
+0

Masz ten sam problem, nie wiesz, jak to naprawić ... –

+0

To samo tutaj na Nexusie 5 z Androidem M ... Czy ktoś zdołał go naprawić od tego czasu? – ChrisCarneiro

+0

tuż po tym, jak biblioteka działała zgodnie z przewidywaniami i zakończyła zrzucanie w ciągu około 10 sekund. Otworzyłem wtedy LeakActivity i odkryłem, że głównym źródłem wycieków było ... LeakActivity oO –

Odpowiedz

-2

należy dodać RefWatcher do fragmentu równie dobrze jak to, co jest opisane na stronie projektu: https://github.com/square/leakcanary

LeakCanary.install() zwraca pre configu czerwony RefWatcher. Instaluje również ActivityRefWatcher, który automatycznie wykrywa, czy aktywność jest nieszczelna po wywołaniu Activity.onDestroy().

public class ExampleApplication extends Application { 

    public static RefWatcher getRefWatcher(Context context) { 
    ExampleApplication application = (ExampleApplication) context.getApplicationContext(); 
    return application.refWatcher; 
    } 

    private RefWatcher refWatcher; 

    @Override public void onCreate() { 
    super.onCreate(); 
    refWatcher = LeakCanary.install(this); 
    } 
} 

Można użyć RefWatcher oglądać przecieków fragment:

public abstract class BaseFragment extends Fragment { 

    @Override public void onDestroy() { 
    super.onDestroy(); 
    RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity()); 
    refWatcher.watch(this); 
    } 
} 

Poza tym, jeśli chcesz uzyskać zrzut sterty gdy wyciek pamięci stało, wystarczy otworzyć Android monitora urządzeń z Android Studio i wybierz kartę "Eksplorator plików". W katalogu/mnt/shell/emulated/0/Download/leakcanary/detected_leaks znajdziesz wszystkie pliki zrzutu sterty.

enter image description here

+0

To nie odpowiada na pytanie OP. –

+0

Proszę sprawdzić, czy refwatcher jest używany poprawnie w Fragmentach. Jeśli nie, nie można stwierdzić, czy rzeczywiście nastąpił wyciek pamięci, ponieważ komunikat "Dumping memory, app will freeze." Brrr. " oznacza tylko "podejrzenie" wycieku pamięci ze zrzutem sterty. – motou

+3

Przepraszam, jeśli się nie rozumiem ... OP nie wspomniał nic konkretnie o Fragmentach. W ich przypadku (i moim) wszystko, co robimy, polega na umieszczeniu linii 'LeakCanary.install (this)' w metodzie 'Application # onCreate()'. –

40

Jeśli jesteś na Androida M trzeba przyznać uprawnienie „write pamięci zewnętrznej” lub wycieku kanarka zawiśnie na długi czas z komunikatem brrr. W szufladzie aplikacji kliknij długi program uruchamiający na kanale wyciekowym (tak, jakby go odinstalować) i przeciągnij do "informacji o aplikacji" i włącz zezwolenie na przechowywanie.

+3

Android M powoli staje się zmorą mojego istnienia. Nawet nie podejrzewałam, że to będzie problem, ale tak było. W GitHub jest otwarty problem, więc mam nadzieję, że zostanie naprawiony w przyszłej wersji. – CodyEngel

+4

@bsautner Naprawiono to w Leakcanary w wersji 1.4-beta1. [Uzyskaj pozwolenie na przechowywanie na M] (https://github.com/square/leakcanary/commit/ea0af1d6be08ba4ac7eda913219456286ab0c4f8): 'Gdy wykryty zostanie potencjalny wyciek, jeśli nie masz pozwolenia na przechowywanie, zrzekamy wyciek i wyświetlamy powiadomienie. Powiadomienie to wyświetli okno dialogowe uprawnień.' – blizzard

+0

Co jeśli nie mam M i nadal otrzymuję ten błąd? Mam aplikację działającą na L z uprawnieniami do odczytu i zapisu dla zewnętrznych pamięci masowych i nadal widzę to irytujące okno dialogowe. Jakieś sugestie? –

Powiązane problemy