2015-09-05 13 views
6

È context.getSystemService() una chiamata costosa?Context.getSystemService() è una chiamata costosa?

I.e. Ho creato una piccola libreria di rete http (so che ci sono altre librerie di rete http disponibili) che usa ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); per verificare (prima di eseguire una richiesta http) se l'utente è connesso a Internet (tipo strategia di fail fast).

La mia domanda è: devo salvare lo ConnectivityManager come variabile di istanza (campo classe) della mia libreria http o dovrei chiamare ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ogni volta prima di avviare una richiesta http per recuperare un "nuovo" ConnectivityManager? È la stessa istanza ConnectivityManager restituita ogni volta che chiamo getSystemService(Context.CONNECTIVITY_SERVICE) (in altre parole, la memorizzazione di un ConnectivityManger in un campo classe può causare problemi poiché la mia libreria http è una vita lunga -> vivi finché viene eseguita l'applicazione)

risposta

5

La mia domanda è: devo salvare ConnectivityManager come variabile di istanza (campo classe) della mia libreria http o dovrei chiamare ConnectivityManager cm = (ConnectivityManager) context.getSystemService (Context.CONNECTIVITY_SERVICE); ogni volta prima di iniziare una richiesta http per recuperare un "nuovo" ConnectivityManager?

Mi terrei sull'istanza. Mentre lo getSystemService() in pratica non sembra essere così costoso da chiamare, perché chiamarlo più spesso del necessario?

in altre parole, può Memorizzazione di un ConnectivityManger in un vantaggio campo di classe di problemi in quanto la mia libreria http è una lunga vita uno -> vive più a lungo periodo di applicazione

per essere al sicuro lato, chiamare getSystemService() su Application singleton (getApplicationContext()). Solitamente, l'oggetto restituito da getSystemService() non sa nulla dello Context che lo ha creato. Occasionalmente, lo — CameraManager in Android 5.0 ha sofferto di questo difetto, sebbene sia stato risolto in Android 5.1. Se l'oggetto del servizio di sistema sta per sopravvivere al contesto in cui mi trovo, tendo a utilizzare getApplicationContext() per recuperare il servizio di sistema, fuori dalla paranoia.

(le perdite di memoria, sono fuori per ottenere me!)

È la stessa istanza ConnectivityManager tornato ogni volta che io chiamo getSystemService (Context.CONNECTIVITY_SERVICE)

Per essere Onesto, non ho mai guardato.

Problemi correlati