2015-09-05 11 views
6

Czy context.getSystemService() jest kosztownym połączeniem?Czy context.getSystemService() jest kosztownym połączeniem?

tj. Zbudowałem małą bibliotekę sieciową http (wiem, że są dostępne inne biblioteki sieciowe http), które używają ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); do sprawdzenia (przed wykonaniem żądania http), jeśli użytkownik jest podłączony do Internetu (rodzaj strategii szybkiej awarii).

Moje pytanie brzmi: czy powinienem zapisać ConnectivityManager jako zmienną instancji (pole klasy) mojej biblioteki http, czy też powinienem zadzwonić pod numer ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); za każdym razem, zanim uruchomię żądanie http, aby pobrać "nowy" menedżer połączeń? Czy ta sama instancja ConnectivityManager jest zwracana za każdym razem, gdy wywołuję getSystemService(Context.CONNECTIVITY_SERVICE) (innymi słowy, można zapisać w łączniku pola klasy ConnectivityManger problemy, ponieważ moja biblioteka http jest długo trwająca -> działa tak długo, jak uruchamia się aplikacja)

Odpowiedz

5

Moje pytanie brzmi: czy powinienem zapisać Menedżer połączeń jako zmienną instancji (pole klasy) mojej biblioteki http, czy też powinienem połączyć się z ConnectivityManager cm = (ConnectivityManager) context.getSystemService (Context.CONNECTIVITY_SERVICE); za każdym razem, zanim uruchomię żądanie http, aby pobrać "nowy" menedżer ConnectivityManager?

Zatrzymam się na instancji. Podczas gdy getSystemService() w praktyce nie wydaje się być tak kosztownym połączeniem, dlaczego wywołuje się go częściej niż jest to konieczne?

innymi słowy, można przechowywania ConnectivityManger na smyczy pola klasa problemów, ponieważ moja biblioteka http jest długa jeden dzienny -> żyje tak długo, jak uruchomić aplikacji

być na bezpieczne side, zadzwoń pod numer getSystemService() na singleton Application (getApplicationContext()). Zwykle, obiekt zwracany przez getSystemService() nic nie wie o Context, który go utworzył. Czasami zdarzyło się, że w systemie Android 5.0 wystąpił błąd: — CameraManager, ale zostało to naprawione w systemie Android 5.1. Jeśli obiekt usługi systemowej przeżyje kontekst, w którym się znajduję, używam getApplicationContext() do pobierania usługi systemowej z paranoi.

(przecieki pamięci, są one na zewnątrz, żeby mnie!)

jest taka sama instancja ConnectivityManager powrócił każdym razem, kiedy zadzwonić getSystemService (Context.CONNECTIVITY_SERVICE)

które mają być Szczerze mówiąc, nigdy nie patrzyłem.

Powiązane problemy