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

相关问题