Pytanie projektowe w zasadzie - czy ma być , czy należy go wprowadzić w innej klasie - na przykład w wewnętrznej klasie? Czy jest jakiś powód, dla którego jeden wolałby ten niż inne podejście?Android: Gdzie powinien być zdefiniowany/zarejestrowany OnSharedPreferenceChangeListener?
Gdzie należy zarejestrować słuchacza? Mam na myśli the docs i zdrowy rozsądek nakazują zarejestrować/wyrejestrować odpowiednio onResume/onPause
, ale widząc azillionregistrations w onCreate
Po prostu zastanawiam się, czy czegoś brakuje.
Nie jestem też całkiem pewien, czy brak wyrejestrowania (a więc, na przykład wyrejestrowanie, nie może zostać wywołane jako onStop
, nie gwarantuje się, że zostanie wywołany) musiałby prowadzić do wycieku. Więc jeśli mam na przykład
class MyPref extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
SharedPreferences sharedPreferences;
// init sharedPreferences
onStart(){
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
// no unregistration
}
Czy ten wyciek instancję MyPref
raz wrócę do jednego z moich innych zajęć?
Na koniec - czy te same kwestie miałyby zastosowanie do OnPreferenceChangeListener
?
Edycja: wracając do tego, nie widzę sposobu, aby wyrejestrować OnPreferenceChangeListener
- czy jestem ślepy?
_ Rejestracja rejestracji i de-registration_ - dlaczego? czy nie trzeba wyrejestrowywać słuchacza? a co z nieszczelnością, o którą pytałem? –
Nie musisz go wyrejestrowywać. System po prostu go zabije, jeśli zdecyduje się zabić aplikację. Poza tym każda aplikacja działa w swojej własnej instancji maszyny wirtualnej, która również zostaje zabita, więc nie musisz niczego wyrejestrowywać i nie dojdzie do wycieku - cała pamięć zostanie zwolniona po zakończeniu procesu (jądro się tym zajmie) . Dlatego zaleca się zapisywanie danych w trwałym miejscu w 'onPause' lub' onStop'. Jednak nie dzieje się to pomiędzy 'onPause' i' onResume'. – Shade
@Mr_and_Mrs_D, czy znalazłeś lepszą odpowiedź na to pytanie? Jeśli tak, dlaczego nie odpowiesz na to z korzyścią dla wszystkich? – Shade