0

此函數在UiThread上運行,但似乎並不意味着它也可以訪問活動上下文。我應該向我的AsyncTask實施一個公共設置器來傳遞活動(作爲參考)嗎?我是否還必須將ActivityContext傳遞給AsyncTask才能操作視圖?

protected void onPostExecute(Bitmap bitmap) { 
     //following is underlined red due to missing context 
     (ImageView)findViewById(ResId)).setImageBitmap(bitmap); 
     } 

回答

0

我可以考慮兩種選擇。

  1. 如果AsyncTask是您活動的內部類,則可以使用getApplicationContext()獲取Context對象而不傳遞活動對象。
  2. 如果您必須從不同的方法訪問ImageView對象,或者AsyncTask類處理的任務可以多次運行,您可能會考慮將ImageView對象存儲爲活動類的成員,因此您可以不需要一個訪問它的上下文。
+0

@ 1:我在一個新文件中創建了這個類,因爲我想在我的所有Activities中使用這個泛型類。所以,我想這不會起作用。不過,我已經在我的「AppController」中存儲了ApplicationContext的引用,我可以從我的代碼的任何位置訪問它。但是通過將ActivityContext傳遞給ApplicationContext並沒有太大的區別。或者,在那裏?我有時覺得,ApplicationContext有點慢。最重要的是,我實際上並不認爲你可以通過應用程序上下文訪問findViewById方法,而不是活動的上下文。 – OneWorld 2010-10-13 13:18:59

+0

@ 2:所以在這裏你建議我不要傳遞上下文,而只傳遞所需的ImageView對象的引用。我認爲這是一個好方法,因爲我只需要「findViewById」的上下文。在傳遞上下文而不是傳遞ImageView對象方面,性能方面是否更昂貴? – OneWorld 2010-10-13 13:22:13

+0

好吧,然後選項2將是我猜的更好的解決方案。我不確切知道哪種對象類型需要更多的資源,但對於我來說,一個Context對象似乎比單個ImageView要「重得多」。 – Flo 2010-10-13 15:23:35

相關問題