需要帮助了解放置一段代码的位置,onCreate()/ OnStart

时间:2011-12-23 22:17:34

标签: android oncreate activity-lifecycle onstart

我试着看一下活动生命周期,但我仍然不明白我的代码放在哪里。

  1. 在我的onCreate()我获得GPS位置。
  2. 稍后在应用程序中,Camera Intent被调用,然后被解雇。
  3. 再次检索GPS位置(我想再次执行onCreate()?)
  4. 我只希望在启动应用程序一开始就检索一次GPS位置。

5 个答案:

答案 0 :(得分:1)

您可以检查如果您已经拥有有效的GPS位置,则可以跳过此步骤而不再检索它。您可以使用SharedPreferences存储此状态。

希望这有帮助!

答案 1 :(得分:1)

创建活动时会调用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()

希望它有所帮助!

答案 2 :(得分:0)

您应该将GPS位置保存在实例数据中,然后在重新启动活动时将其传递回onCreate。存储它的位置在onSaveInstance

答案 3 :(得分:0)

仅将其放入onCreate()。

现在,如果您认为它被多次调用,您可以做一些事情来检查您是否已经拥有它。如

onCreate(){

//other code

    if(GpsStuff == null)
    {
        //get gps position
    }
}

答案 4 :(得分:0)

有关背景信息,请参阅my answer about why you can't just "get" a GPS position。在onCreate()方法中获取GPS位置一次(使用延迟初始化检查以查看在多次调用onCreate()时是否已经获得GPS坐标)可能不适合您的应用程序,并且可能导致您的应用程序将被Android操作系统强行关闭。

如果您确定设备的最后一个已知位置对您的应用程序总是足够好,那么每次调用onCreate()方法时调用它都会很好,因为它不需要使用GPS电路。因此,如果最后一个已知位置足够好,那么只需在每次调用onCreate()方法时请求它,并避免延迟初始化类型sof检查的复杂性。

如果最后一个已知位置对于您的应用程序并不总是足够好,那么您无法可靠地等待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
    }
  }
}