2011-10-28 20 views
0

我有一個加載模型對象的自定義視圖(我們稱之爲Person,爲什麼不)。這些對象存儲在DB中,通過Loader獲得,並通過實例化所述視圖的CursorAdapter插入到ListView中。到現在爲止還挺好。Android:SQLite,用戶界面,緩存和異步查詢

現在,Person有一個對另一個模型對象的引用,比如CountryCountries在它自己的表中,我需要國家的名稱(當然有ID)在列表項中表示它。

我看到三個選項:(?setPerson()

  1. 查詢是從裝入Person數據視圖方法的數據庫。

  2. 我的模型對象與國家信息深預加載(我想我只是一個術語,抱歉)。

  3. 請求國家數據異步查詢,然後返回到用戶界面。

(1)的問題是UI可能會阻塞。 (2)的問題在於它會導致內存中的重複數據重複。 (3)的問題在於它使流動複雜化,可能不必要。

我該怎麼辦? (1)的性能重要嗎?也許(1),查詢來自View的數據,但實現一個緩存,以避免重複擊中數據庫相同Country?也許(2),用上述緩存層來確保對象的實例是唯一的?第四個選項我沒有考慮過? ORM做什麼?

謝謝!

回答

2

在您用於CursoLoader的查詢中,在PersonCountry表上執行INNER JOIN。查詢的結果將包含您想要的單個遊標中的所有信息。

編輯迴應置評

這大概是處理事情的最佳/乾淨的方式。此時不要擔心內存中的重複,這是一個不成熟的優化。此外,你的桌子真的有多大?我們來回顧一下信封計算。如果連接表的每一行佔用100個字節(這是一個巨大的行,所以我在這裏考慮更糟糕的情況),那麼即使您的結果查詢中有10000行(再次,這是很大的),您只能使用1,000,000字節,或少於1兆的內存。

+0

那......那不能解決我的問題= /它是選項2。 – slezica