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

前端之家收集整理的这篇文章主要介绍了android – context.getSystemService()是一个昂贵的调用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
context.getSystemService()是一个昂贵的调用吗?

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

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

解决方法

My question is should I save the ConnectivityManager as an instance variable (class field) of my http library or should I call ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); every time before I start an http request to retrieve a “new” ConnectivityManager?

我会抓住这个实例.虽然getSystemService()在实践中似乎没有那么昂贵,但为什么要比经常更频繁地调用它?

in other words,can storing a ConnectivityManger into a class field lead to problems since my http library is a long living one –> lives as long as application run

为了安全起见,在Application singleton(getApplicationContext())上调用getSystemService().通常,getSystemService()返回的对象对创建它的Context一无所知.有时候,确实如此 – Android 5.0中的CameraManager遭遇了这个漏洞,虽然这在Android 5.1中得到了修复.如果系统服务对象将比我所处的上下文更长,我倾向于使用getApplicationContext()来解决系统服务,而不是偏执狂.

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

Is the same ConnectivityManager instance returned every time I call getSystemService(Context.CONNECTIVITY_SERVICE)

说实话,我从来没有看过.

猜你在找的Android相关文章