我试着看一下活动生命周期,但我仍然不明白我的代码放在哪里。
onCreate()
我获得GPS位置。Camera Intent
被调用,然后被解雇。 onCreate()
?)我只希望在启动应用程序一开始就检索一次GPS位置。
答案 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
}
}
}