2011-02-18 64 views
1

我有兩個約500條記錄的靜態表格,每個表格都爲我的應用程序中的某些ListView提供查找材料。當應用程序第一次啓動並創建表時,我運行一個進程來填充表格,這需要不到一分鐘的時間,但我一直在尋找在後臺運行進程使用異步任務與進度對話框,讓用戶知道發生了什麼。 我的問題是,當進程正在運行並且正在添加數據,然後用戶傾斜手機時,進程將被取消。那麼我的數據庫的狀態會是什麼? Async Task是最好的解決方案還是應該使用線程?啓動後創建表格後加載我的Sqlite表格的最佳方式

回答

0

所以當你旋轉或改變手機的方向時,活動是唯一被銷燬的東西。您不一定必須擺脫異步任務。實際上它會活下去。只是不要讓另一個任務進入並且特意處理它。

因此,如果您希望讓您的活動像在旋轉時一樣行動起來,您可以立即開始,在您離開的地方還有一個名爲onRetainNonConfigurationInstance()的方法。它基本上是儲物箱),它不能在saveInstanceState被瓜分狀物體(

這樣的想法存在的方法:

public void onCreate(Bundle a) { 

    ... 
    AsyncTask myTask = getNonConfigurationInstance(); 
    if (myTask == null) { 
    myTask = new AsyncTask(); 
    myTask.execute(); 
    } 
    ... 
} 

public Object onRetainNonConfigurationInstance() { 
    return myTask; 
} 

這將使異步任務運行,當你以後得到所謂你的onCreate你只需要選擇它的旋轉,並做需要做的事情。

有一點需要注意的是progressView。它將不得不被銷燬並重新初始化到新的州。首先應該在AsyncTask之外完成對它的整體解僱和展示。但沒有什麼可以說AsyncTask不能調用一些回調,你在你的onCreate()中設置的總是,這樣它會通知告訴更新UI或播放完成聲音等。

0

你也可以決定通過在清單中使用android:configChanges來自行處理配置更改。

然後執行onConfigurationChanged方法並執行其中的任何操作。

查看developer doc

當配置變化在 運行時,該活動被關閉並重新啓動默認 ,但聲明 配置與此屬性將 阻止 重新開始活動。相反,活動 保持運行狀態,其調用 onConfigurationChanged()方法的調用爲 。

相關問題