2

我有一個AsyncTask,在我的Main Activity中被稱爲onCreate()。在同一個Activity如果方向改變AsyncTask被再次調用。我如何防止這種情況發生,或者我如何重組我的程序以避免這種情況發生?當設備的方向發生變化時,onCreate方法不斷被調用

public class Main extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.pages); 
     StartProcess sProcess = new StartProcess(); 
     sProcess.execute(this); 
    } 
} 
+0

將禁止從改變取向您的應用程序解決問題了嗎? – jcxavier 2012-01-12 17:50:10

+0

@jcxavier可悲的是沒有.. – Neeta 2012-01-12 17:50:41

回答

1

您可以添加在活動android:configChanges="orientation"清單和手動設置內容查看或通過在活動重寫onConfigurationChanged方法改變佈局。

+0

謝謝,這工作! – Neeta 2012-01-12 18:25:08

3

您應該檢查Handling Run Time Changes

你可以處理或者通過使用

配置更改

期間保留的對象允許您的活動重新啓動時的配置變化,但攜帶狀態與您的活動的新實例對象。

處理配置改變自己

防止在某些配置更改重新啓動活動的系統,但收到一個回調時的配置做改變,使您可以手動更新您的活動是必要的。

要運行時配置改變期間保持的對象:

覆蓋的onRetainNonConfigurationInstance()方法返回你想保留的對象。

當您的活動再次創建時,請致電getLastNonConfigurationInstance()恢復您的對象。

@Override 
public Object onRetainNonConfigurationInstance() { 
    final MyDataObject data = collectMyLoadedData(); 
    return data; 
} 

保留在OnCreate;

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance(); 
    if (data == null) { 
     data = loadMyData(); 
    } 
    ... 
} 

或者乾脆加入這樣的代碼在你的清單,你的活動

android:screenOrientation="portrait" 

android:screenOrientation="landscape" 
相關問題