context.getSystemService()是一个昂贵的调用吗?

时间:2015-09-05 20:30:50

标签: android android-context

context.getSystemService()是一个昂贵的电话吗?

即。我已经构建了一个小的http网络库(我知道还有其他可用的http网络库),如果用户与互联网连接,那么使用ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);来检查(在执行http请求之前)(一种失败的快速策略) 。

我的问题是我应该将ConnectivityManager保存为我的http库的实例变量(类字段),还是应该在每次启动http请求之前调用ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);来检索“新” ConnectivityManager?每次调用getSystemService(Context.CONNECTIVITY_SERVICE)时都会返回相同的ConnectivityManager实例(换句话说,可以将ConnectivityManger存储到类字段中导致问题,因为我的http库是一个长期存在的问题 - >只要应用程序运行就会存在)

1 个答案:

答案 0 :(得分:7)

  

我的问题是我应该将ConnectivityManager保存为我的http库的实例变量(类字段),还是应该调用ConnectivityManager cm =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);每次我开始一个http请求之前检索一个" new" ConnectivityManager?

我会抓住这个实例。虽然getSystemService()在实践中看起来并不昂贵,但为什么要比经常更频繁地调用它?

  换句话说,可以将ConnectivityManger存储到类字段中导致问题,因为我的http库是一个很长的生存者 - >只要应用程序运行就会存在

为安全起见,请致电getSystemService()单身人士Application上的getApplicationContext()通常getSystemService()返回的对象对创建它的Context一无所知。有时候,Android 5.0中的CameraManager遭遇了这个漏洞,虽然在Android 5.1中已经修复了。如果系统服务对象将比我所处的上下文更活跃,我倾向于使用getApplicationContext()来解析系统服务,而不是偏执狂。

(内存泄漏,他们出去找我!)

  

每次调用getSystemService时都返回相同的ConnectivityManager实例(Context.CONNECTIVITY_SERVICE)

说实话,我从未看过。

相关问题