Java 这要花这么长时间吗?

Java 这要花这么长时间吗?,java,android,database,string,performance,Java,Android,Database,String,Performance,我正在使用LocationManager的requestLocationUpdates()在打开应用程序时获取用户的坐标,并且获取坐标的时间比在其他应用程序中要长。 获取位置需要一段时间,但我的应用程序仍在加载和等待位置(我使用LocationManager的requestLocationUpdates())的时间比其他应用程序长得多 以下是我启动应用程序时通知面板的屏幕截图: 请注意,当我打开我的应用程序时,它会显示查找位置…,因为我的应用程序会在应用程序打开后立即调用LocationMan

我正在使用
LocationManager的
requestLocationUpdates()
在打开应用程序时获取用户的坐标,并且获取坐标的时间比在其他应用程序中要长。

获取位置需要一段时间,但我的应用程序仍在加载和等待位置(我使用
LocationManager的
requestLocationUpdates()
)的时间比其他应用程序长得多

以下是我启动应用程序时通知面板的屏幕截图:

请注意,当我打开我的应用程序时,它会显示
查找位置…
,因为我的应用程序会在应用程序打开后立即调用
LocationManager的
requestLocationUpdates()

以下是问题的要点: 即使这个通知在我面前,如果我导航到一个像谷歌地图这样的应用程序,它也能在几秒钟内确定我的确切位置。这是因为谷歌地图使用了
getLastLocation


为什么其他应用程序能够比我的更快地获取位置

所以有两种获取位置的方法-精细定位(gps)和粗略定位(网络)。Google Play Services提供了第三种方法,但它使用了这两种方法的组合。全球定位系统需要很长时间——它必须与20多颗卫星中的7颗进行通信,才能第一次获得位置。网络速度很快,它只需要一个网络请求(如果缓存数据,则需要更少的请求)

许多应用程序将同时使用这两种方式,使用网络获取快速答案,然后在获得数据后改进为GPS。我知道地图是这样做的。这将使您快速得到一个不准确的答案,并允许您在以后提高准确性


可以使用GetLastKnownLocation更快,但必须能够处理返回null的问题。一般来说,网络已经足够快了。

你说Google Play服务使用这两种服务的组合。你能解释一下它是怎么做到的吗?谢谢,好的。因此,当我得到我的位置时,我将其存储在类引用中,并使用getter和setter检索它。在初始化对象之前,如何检查存储的值是否为null?例如,用户来到我的应用程序,它开始获取位置,用户打开我的应用程序并转到另一个应用程序30秒,然后用户返回到我的应用程序。当他们回来的时候,我不想再要求位置了,因为那会再次花费很多时间。相反,在我的
onResume()
中,我想这样检查:
如果(myLocationObject==null&&myLocationObject.getLength()==0&&myLocationObject.getLatitude()==0){StartRequestingUpdates,因为用户没有'TalReadyRequestedUpdate();
但是,如果
myLocationObject
为空,则我会得到
尝试调用虚拟方法'double-curlybrace.ruchir.appName.LocationClass.getLongitude()'在空对象引用上
,因此我基本上希望用户能够在请求位置时离开我的应用程序,因此当他们返回时,如果值不为空,则我可以使用这些值,而不是再次请求。但是,我遇到了空指针异常。我如何解决此问题?我确信有一个非常简单的解决方案我只是看不见的离子…:)