2013-10-11 47 views
2

我目前正在開發一個應用程序(您可能已經回答或看到了我的其他一些問題),並且遇到可用性問題。我有一個導航抽屜,當用戶點擊其中一個項目時,另一個片段替換了主要的frame_content。我遇到的問題是,交易需要一段時間在我的設備上。改善Android應用程序片段事務的加載時間

我點擊導航抽屜中的一個項目,然後應用程序「搜索」幾秒鐘,並將繼續正常工作。

我也知道問題在哪裏,因爲當我替換一個沒有數據的片段時,它會立即生效。只是,應用程序必須顯示非常多的數據。我將HashMap<String, Collection<String>>傳遞給片段,並在那裏讀取它。我將它保存到一個數組中,然後我再次在for循環中讀取該數組並顯示數據。

我想過其他各種方式,例如:讀取主要活動中的所有數據,然後將多個數組傳遞給片段。但問題是,我需要每個片段13個數組,因爲hashmap包含13個不同鍵的數據。每個鍵有1個值。總共有50個條目。所以

50條目包含13個鍵包含1個值。

這是爲設備加載的非常多的數據。所以我想過如何提高加載片段的速度。

我正在下載數據從AsyncTask的XML加載啓動畫面,然後我將它保存到不同的哈希映射(取決於我加載的XML)。然後我開始主要活動的新意圖並通過所有哈希映射。然後根據導航抽屜列表打開一個新的片段並將散列映射傳遞給片段中的一個函數。然後將數據讀入數組,然後在OnCreateView方法中再次讀出數組以將數據添加到佈局。

任何速度改進的想法?這是我當前如何改變我的片段

protected void onNavItemSelected(int id) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 
    switch ((int) id) { 
    case 101: 
     MainFragment.passList(hashMap); 
     ft.replace(R.id.content_frame, new MainFragment()); 
     ft.commit(); 
     break; 
//further cases.... 

回答

3

也許

ft.commit(); 
getSupportFragmentManager().executePendingTransactions(); 
break; 

將幫助你更快地執行交易(一定要調用它的主線程)

http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

或者如果問題不在交易本身,也許這是你的循環需要改進?

+0

我想這是我的循環。因爲當我在for循環中只有一個項目時,它幾乎無時間地加載。當我只有5它加載速度太快,但是當我有50(我需要)它需要太長時間。或者我應該只加3,當用戶向下滾動自動載入下一個數據? – Musterknabe

+0

您使用列表視圖爲您的項目? – guikk

+0

我在RelativeLayout的ScrollView中有一個LinearLayout。在ScrollView中擁有LinearLayout,因爲它只能有一個孩子。你會建議使用列表視圖而不是線性佈局嗎? – Musterknabe