2015-09-05 3 views
6

context.getSystemService() дорогой звонок?Является ли context.getSystemService() дорогим звонком?

I.e. У меня есть небольшая сетевая библиотека http (я знаю, что есть другие доступные сетевые библиотеки http), которая использует ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); для проверки (до выполнения HTTP-запроса), если пользователь подключен к Интернету (например, стратегия быстрого сбоя).

Мой вопрос в том, должен ли я сохранить ConnectivityManager в качестве переменной экземпляра (поле класса) моей http-библиотеки или мне нужно позвонить ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); каждый раз, прежде чем я начну запрос http для получения «нового» ConnectivityManager? Является ли тот же экземпляр ConnectivityManager возвращаемым каждый раз, когда я вызываю getSystemService(Context.CONNECTIVITY_SERVICE) (другими словами, можно сохранить ConnectivityManger в поле класса, что приведет к проблемам, так как моя библиотека http - длинная живая -> живет до тех пор, пока выполняется приложение)

ответ

5

Мой вопрос: следует ли сохранять ConnectivityManager как переменную экземпляра (поле класса) моей http-библиотеки или я должен вызвать ConnectivityManager cm = (ConnectivityManager) context.getSystemService (Context.CONNECTIVITY_SERVICE); каждый раз, прежде чем я запустил http-запрос для получения «нового» ConnectivityManager?

Я бы держался за экземпляр. В то время как getSystemService() на самом деле на самом деле не так дорого говорить, зачем звонить ему чаще, чем нужно?

других слов, можно хранить в ConnectivityManger в поле класса приводит к проблемам, так как мой HTTP библиотека долго живущая один -> живет до тех пор, выполняемым

Чтобы быть на безопасном стороны, звоните getSystemService() на Application singleton (getApplicationContext()). Обычно, объект возвращается getSystemService() ничего не знает о Созданном Context. Время от времени — CameraManager в Android 5.0 страдает от этого недостатка, хотя это было исправлено в Android 5.1. Если объект службы системы будет переживать контекст, в котором я находиюсь, я, как правило, использую getApplicationContext() для извлечения системной службы из паранойи.

(утечки памяти, они, чтобы получить меня!)

ли тот же экземпляр ConnectivityManager возвращается каждый раз, когда я называю getSystemService (Context.CONNECTIVITY_SERVICE)

Чтобы быть честный, я никогда не смотрел.

Смежные вопросы