2011-12-23 141 views
0

我試着看看靈活性生命週期,但我仍然不明白在哪裏放我的代碼。需要幫助瞭解在哪裏放一段代碼,onCreate()/ OnStart

  1. 在我的onCreate()我得到的GPS位置。
  2. 稍後在應用程序中,調用Camera Intent,然後解散。
  3. GPS定位,則再次檢索(我猜onCreate()再次被執行?)

我只希望GPS位置被檢索一次,一次啓動的應用程序的一開始。

+0

我想我也遇到了這個問題,它與你調用啓動另一個活動(無論哪個活動接受相機意圖)的方式有關。我認爲會發生什麼是通常在你自己的活動中,只有onStart()和onStop()被調用。但是我想因爲你的應用程序暫時不是頂級應用程序,所以當你下次應用程序處於「焦點」時,android決定調用onCreate()。 **糾正我,如果我在這裏錯了,即時通訊只在另一個筆記上猜測** – 2011-12-23 22:34:39

+0

,你確定你想獲得GPS位置在「onCreate()」?這聽起來像是更多的後臺服務,你首先檢查你是否已經獲得了GPS位置。 – 2011-12-23 22:36:06

+0

@DavidT。在創建應用程序時,我確實需要GPS位置,因爲它需要在開始使用它的位置記錄用戶的位置。 – Neeta 2011-12-24 01:27:07

回答

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 
    } 
    } 
} 
1

你可以檢查,如果你已經有一個有效的GPS位置,那麼你可以跳過這一步,不要再檢索它。您可以使用SharedPreferences來存儲此狀態。

希望這會有所幫助!

+0

你真的不想把它存儲在首選項中。如果這樣做,3周後,當應用程序再次運行時,您將獲得相同的GPS位置。 – zmbq 2011-12-23 22:28:06

+0

當然,你必須管理這個。例如,在onDestroy中,您必須將此值設置爲false。我不是故意把它存儲在那裏,而是永遠留下:) – 2011-12-23 22:30:35

0

您應該將GPS位置保存在實例數據中,然後在活動重新啓動的情況下將該位置傳回onCreate。存儲它的地方是在onSaveInstance

0

把它放在onCreate()只。

現在,如果你認爲它被多次調用,你不能做某件事來檢查你是否已經擁有它。如

onCreate(){ 

//other code 

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

當創建活動時調用onCreate()。 而onStart()正好在onCreate()之後被調用。

你可以閱讀有關的活動的生命週期中的位置:http://developer.android.com/reference/android/app/Activity.html

您的問題,您可以覆蓋的onSaveInstanceState,可以幫助您節省捆綁, 然後拿回來在onCreate方法的方法(在paramater在onCreate是這個捆綁)。

protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    *Modify the bundle* 
} 

如果你不能序列化的GPS位置,您可以使用:

@Override 
public Object onRetainNonConfigurationInstance() { 
    return objectYouNeed; 
} 

並獲取該對象使用getLastNonConfigurationInstance()

希望它有幫助!