2010-11-04 56 views
1

我一直堅持現在嘗試爲自定義拼貼覆蓋類實現線程或背景圖像加載,我一直在努力。談到Java時我非常無用,所以線程並不是我有過的任何經驗。Android線程 - 自定義Googlemaps拼貼覆蓋

基本上我擴展了ItemizedOverlay,並在draw()方法中計算我需要在標準谷歌貼圖上顯示的貼圖,然後使用URLConnection獲取這些圖像,並使用BitmapFactory將它們解碼並將它們繪製到正確的畫布上在屏幕上的位置,使圖像在約50%的不透明度(自定義瓷磚是手機網絡覆蓋PNG的是用於我們的網絡應用程序)的谷歌瓷磚頂部

我最初得到這一切與瓷磚在正確的位置加載,但遇到內存問題,並在平移時出現「凍結」,因此實施了一些基本的緩存和內存管理,以便將地圖上顯示的圖塊存儲在內存中,並且將下載的圖塊存儲到SD卡中。

然後我想到了凍結,而平移是由於下載圖像的阻塞性質,所以一直試圖實現線程。我創建了一個類來擴展AsyncTask以在後臺下載圖像並將它們存儲到SD中,然後在onPostExecute方法中,然後嘗試繪製所有圖塊。

但onPostExecute似乎從未出現,現在我知道AsyncTask必須在主UI線程中調用,所以試圖用Thread.currentThread()。getId()調用代碼來調試執行。對於AsyncTask,doInBackground方法的線程Ids通過out是1,然後是10。現在我不確定1是否是主UI線程。在擴展的MapActivity類中,onCreate方法的Thread.currentThread()。getId()返回1,但我不確定MapActivity類是否在主UI線程中執行?

Here羅曼蓋伊提到,onPostExecute方法應該有@Override,但是當我這樣做,日食其標記爲錯誤

"The method onPostExecute(Boolean...) of type TileCache.ImageLoadTask must override or implement a supertype method" 

所以我想什麼是錯的,但存在的唯一的解決提供日食是去除在@覆蓋 所以我想用出來後我的所有的源代碼,這個問題的我是:

  1. 是所謂的主UI線程的MapActivity onCreate方法?
  2. @Override錯誤是什麼意思?或者爲什麼它會顯示錯誤
  3. 有沒有人有自定義瓷磚覆蓋實現背景圖像加載和瓷磚緩存的例子?

感謝

回答

1

回答你的第一個兩個問題:

  1. 是。實際上,除非指定,否則Activity類中的所有函數都將在UI線程中調用。
  2. 您的@Override錯誤似乎...您的ImageLoadTask不是AsyncTask的擴展。
+0

啊是的,你讓我思考,結果我沒有onPostExecute方法的正確參數。我有onPostExecute(布爾... params)是表示一個數組/列表?而不僅僅是onPostExecute(布爾結果) – Okeydoke 2010-11-04 01:16:02

+0

如果您使用Eclipse,它確實有一個很好的功能,可以覆蓋簡單(並且完美無瑕)。在菜單中尋找源代碼 - >覆蓋,您可以選擇要覆蓋的內容,併爲您生成一個漂亮的模板。 – xandy 2010-11-04 03:59:57