2017-07-26 50 views
5

Mam aplikację, w której używam Butterknife, a ostatnio znalazłem fragment, w którym nie udało mi się wywołać unbinder.unbind() w fragmencie onDestroyView(). Rozwiązałem problem, ale to mnie zmusiło do myślenia.Co dokładnie dzieje się, gdy nie można użyć polecenia unbind()?

Jakie błędy mogą powodować i dlaczego? Nie mam obecnie określonego błędu, ale chciałbym wiedzieć, na co należy zwrócić uwagę w przyszłości, a strona internetowa biblioteki nie określa problemów, jakie może to powodować.

Odpowiedz

2

Wyobraź sobie, że masz retained fragment i zainicjalizowałeś widok, używając @BindView.

Następuje zmiana orientacji, która powoduje zniszczenie instancji czynności, ale nie ten fragment, ponieważ ten fragment jest fragmentem zatrzymanym, co oznacza, że ​​zainicjowane pole nadal istnieje (nie null) i trzyma silne odniesienie do widoku poprzedniego działania, które prowadzi do przecieku działalności.

Chociaż może to zająć trochę czasu (ponieważ ostatecznie zamierzasz wykonać kolejny ButterKnife.bind() w onViewCreated(), prawda? Ale kto wie, może nie), nadal lepiej jest zwolnić zasoby tak szybko, jak nie potrzebujesz ich i niech GC wykonuje swoją pracę.

Też zastanawiałem się nad tym pytaniem jakiś czas temu, a poza tym nie mogłem znaleźć innego scenariusza, w którym unbind() byłby bardzo potrzebny.