2016-12-30 97 views
0

我的android應用程序有一個ListView,它從後臺獲取一組圖像url,然後將其傳遞給UI線程。 UI線程然後下載圖像並顯示它們(我使用Picasso來確保緩存和調整大小。)在後臺線程或UI線程中加載圖像?

我想知道如果我應該在後臺線程中下載圖像,然後只傳遞調整大小的位圖到UI線程進行顯示。另外,當用戶在兩種場景中滾動屏幕時會發生什麼情況 - 所有圖像是否都會從網上重新獲取?我無法理解在這種情況下哪個更快。該應用程序非常類似於Facebook的Android應用程序。

還有一件事 - 我的應用程序每5分鐘刷新一次,如果列表中有任何新圖像url,它將重新開始從後臺線程開始的整個過程。我的想法是,因爲早先的圖像會被緩存,所以它們不會再被加載。只有新的網址會被加載。它是否正確?

+1

類似的Facebook應用程序 - 這是一個很好的;) –

+0

類似於Facebook如何加載圖像。我想知道如何在列表視圖中滾動像Facebook一樣的應用程序 - 他們是否在後臺加載圖像並將其緩存到磁盤/內存?當我們獲取新帖時會發生什麼? –

回答

0

UI線程然後下載並顯示影像(我使用的是畢加索的相同,以確保高速緩存和調整大小。)

畢加索不會在主應用程序線程上通過下載圖像默認。我甚至不確定是否有這樣的選擇。

我想知道我是否應該在後臺線程中下載圖像,然後僅將調整後的位圖傳遞到UI線程以供顯示。

畢加索應該爲你做這件事。

此外,當用戶在兩種場景中滾動屏幕時會發生什麼情況 - 是否所有圖像都會從網上重新獲取?

這取決於有多少圖像,它們有多大,緩存的大小等等。畢加索爲您提供了一些選擇,從角落中的調試指示器指示圖像來源(setIndicatorsEnabled(true))和StatsSnapshot告訴您緩存是如何執行的(getSnapshot()),以確定其行爲。

+0

謝謝!假設我在應用程序中向下滾動,然後決定一鍵點擊應用程序的頂部。處理這種情況的最佳方式是什麼? –

+0

@PranavSodhani:對不起,但我不明白這個問題。 – CommonsWare

+0

好吧!讓我再嘗試一次。在我的應用程序中,我最初會在用戶啓動應用程序時加載10個圖像。用戶可以直到屏幕底部,發佈後我將加載10個圖像,這應該繼續 - 類似於如何在Facebook上加載帖子。 現在假設用戶想要到達屏幕的頂部,即單擊滾動到頂部。處理這個問題的最好方法是什麼?我認爲,隨着新圖像的加載 - 畢加索將從緩存中刪除舊圖像,但現在用戶應該看到舊圖像 - 它是如何工作的? –

0

所有的網絡操作都在後臺Android中運行,畢加索也不例外。當您滾動列表時,畢加索檢查緩存,如果緩存中沒有特定圖像,則下載它。