我试图查看活动生命周期,但我仍然不明白将代码放在哪里。
- 在我的
onCreate()
我得到 GPS 位置。 - 稍后在应用程序
Camera Intent
中调用 ,然后将其关闭。 - 再次检索 GPS 位置(我想
onCreate()
正在再次执行?)
我只希望在应用程序启动时检索一次 GPS 位置。
我试图查看活动生命周期,但我仍然不明白将代码放在哪里。
onCreate()
我得到 GPS 位置。Camera Intent
中调用 ,然后将其关闭。onCreate()
正在再次执行?)我只希望在应用程序启动时检索一次 GPS 位置。
您可以检查如果您已经有一个有效的 GPS 位置,那么您可以跳过此步骤并且不再检索它。您可以使用 SharedPreferences 来存储此状态。
希望这可以帮助!
在onCreate()
创建活动时调用。并且onStart()
紧随其后被召唤onCreate()
。
您可以在此处阅读有关活动生命周期的信息:http: //developer.android.com/reference/android/app/Activity.html
对于您的问题,您可以覆盖 onSaveInstanceState,这是一种帮助您保存 Bundle 的方法,然后在 onCreate 方法中将其取回(onCreate 中的参数是此 Bundle)。
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
*Modify the bundle*
}
如果您无法序列化 GPS 位置,您可以使用:
@Override
public Object onRetainNonConfigurationInstance() {
return objectYouNeed;
}
并检索此对象使用getLastNonConfigurationInstance()
.
希望能帮助到你!
您应该将 GPS 位置保存在实例数据中,然后将其传递回 onCreate 以防活动重新启动。存放它的地方在onSaveInstance
仅将其放入 onCreate() 中。
现在,如果您认为它被多次调用,您不能做一些事情来检查您是否已经拥有它。如
onCreate(){
//other code
if(GpsStuff == null)
{
//get gps position
}
}
请参阅我的回答,了解为什么您不能在某些背景下“获取” GPS 位置。在您的 onCreate() 方法中获取 GPS 位置一次(通过延迟初始化检查以查看在多次调用 onCreate() 的情况下您是否已经获得 GPS 坐标)可能不是您的应用程序的正确方法,并且可能导致您的应用程序将被 Android 操作系统强制关闭。
如果您确定设备的最后一个已知位置对于您的应用程序来说总是足够好,那么每次调用 onCreate() 方法时调用它就可以了,因为它不需要使用 GPS 电路。因此,如果最后一个已知位置足够好,则只需在每次调用 onCreate() 方法时都请求它,并避免延迟初始化类型检查的复杂性。
如果最后一个已知位置对您的应用程序来说并不总是足够好,那么您就不能可靠地等待 onCreate() 方法中的修复,因为您冒着定位修复花费太长时间的风险,导致 Android 系统强制关闭您无响应的应用程序因为它没有及时从 onCreate() 方法返回。相反,您需要在 onCreate() 方法中启动一个后台异步任务(检查您是否还没有运行这样的异步任务),该任务开始侦听位置更新,直到收到足够好的修复,然后记住该位置,停止位置侦听器并因此关闭 GPS 电路。使用以下代码:
private MyAsynchGpsLocationListener mGpsListener = null;
public ... onCreate() {
if (mGpsListener == null) {
mGpsListener = new MyAsynchGpsLocationListener();
mGpsListener.start();
}
}
someMethod() {
if (mGpsListener != null) {
Location myLocation = mGpsListener.getLocation();
if (myLocation != null) {
// Do something with a "good enough" location
}
}
}