2011-07-28 39 views
1

我發現Android在屏幕方向更改期間銷燬並重新創建活動。我有一個Activity可以自動查找設備的名義位置並將其顯示回給用戶。該位置存儲在整個應用程序過程中使用的記錄保存對象中。這裏是我的代碼:在Android中處理屏幕方向的變化 - 我做對了嗎?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.location); 

    currentLocation = (TextView) findViewById(R.id.textCurrentLocation); 
    if (savedInstanceState == null) 
     new LocationDetectionTask(this).execute((Void[]) null); 
    else 
     currentLocation.setText(record.getLocation()); 

    Log.d(TAG, "onCreate"); 
} 

(正如您可能能夠告訴,record表示數據記錄對象)。

這種處理屏幕方向變化的方法是否足夠?順便說一句,我不是壓倒性的onSaveInstanceState(Bundle)

此外,一個側面的問題:因爲LocationDetectionTaskAsyncTask,我該如何去處理屏幕方向的變化呢?

編輯:我忘了澄清這一點。在LocationDetectionTask找到位置後,它將其放入record

+1

作爲一個方面的評論。 http://stackoverflow.com/questions/4584015/handle-screen-orientation-changes-when-there-are-asynctasks-running – Malachi

回答

2

您應該嘗試使用onSaveInstanceState(Bundle)保存您的信息,因爲在活動根據方向更改而破壞它之前,會調用它。我會嘗試在獲取信息時使用onRestoreInstanceState(Bundle),但它也應該在onCreate()方法上工作。 (這裏是一個示例Saving Android Activity state using Save Instance State

請記住,Bundle應該用於保存原始類型。如果你想傳遞一個更復雜的對象,你可以嘗試傳遞一個Parcelable對象。 (更多信息http://prasanta-paul.blogspot.com/2010/06/android-parcelable-example.html