2013-02-07 46 views
0

我在我的MainActivity中按照這條Google指令顯示了5個大的位圖,以避免內存泄漏並且不凍結UI線程。在我的MainActivity中運行幾個asynctask

http://developer.android.com/training/displaying-bitmaps/process-bitmap.html

於是,我開始一個AsynctaskonCreate方法我的5個大位圖的每一個...

我不凍結UI線程(好),因爲我m在一個線程中運行我的長進程,但是「我的問題」是這5個大的位圖是同一圖形(面)的一部分,當應用程序啓動時,用戶可以看到不同層在不同時間如何加載。

我以爲在啓動畫面中,直到我的圖像加載,但我想知道這是否是最好的方式來做到這一點(因爲飛濺是需要可能少於1秒)或有更好的就像通知用戶界面線程,當最後一個圖像被加載,然後顯示所有的圖像...或者可能嘗試加載所有圖像在同一個Asynctask

在此先感謝,

Paola。

+0

您必須提供加載之前的進度。看到這個API它真的很簡單:https://github.com/androidquery/androidquery –

+0

我假設,自然,你會顯示你下載的位圖,在每個人的'AsyncTask'在各自的'onPostExecute( )'。爲什麼不在每個'onPostExecute()'中調用下一個'AsyncTask'保存位圖並將它們顯示在最終的'AsyncTask'中?通過這種方式,位圖將一次顯示。這只是我的頭腦。我在一個應用程序中獲取_「Header」_的數據,然後加載_「Comments」_並在'AsyncTask'中將它們一起顯示爲_「Comments」_。 –

回答

0

最後,我已經在同一個Asynctask中加載了5個大的位圖。我已經將它們加載到doInBackground方法中,並將它們全部一次顯示在我的ASynctask的onPostExecute中。

我在想Siddharth Lele的答案,我想要類似的東西,但我知道你得到了相同的結果,從另一個Asynctask的onPostExecute調用一個Asynctask,並等待最後一個Asynctask顯示ImageViews, doInBackground方法是唯一的一個Asynctask並等待這個Asynctask的postExecute,直到所有的Bitmap被加載,我認爲它更有效率,因爲你沒有更多的線程,你需要...

讓我知道如果有是這種方法的一些其他考慮。

謝謝!

+0

只是不要忘記在需要時取消任務,並在服務器(或連接)出現問題時設置超時。你甚至可以在啓動asyncTask之前檢查連通性。 –

0

在最新版本的Android中,在AsyncTask執行程序線程池前有一個出列隊列。它只允許一次運行一個任務。這意味着你的任務按順序進行,這通常是你期望的。不過,在這種情況下,這意味着你是而不是同時加載所有5張圖像。看看:

executeOnExecutor(Executor exec, Params... params) 

...它允許你繞過出列。這會讓你獲得併發性。

從AsyncTasks的網絡連接似乎對我來說可疑。如果其中一個失敗會怎麼樣?對這個問題的更好的解決方案可能是一個多線程的綁定服務,當所有5個圖像都被下載時,它會進行回調。

+0

僅限於我沒有從網絡下載位圖的記錄。只有解碼來自資源與Android指南的一些選項在這裏解釋:http://developer.android.com/training/displaying-bitmaps/process-bitmap.html –

相關問題