【问题标题】:Do I still have to pass the ActivityContext to the AsyncTask in order to manipulate Views?我是否仍需要将 ActivityContext 传递给 AsyncTask 才能操作视图?
【发布时间】:2010-10-13 10:16:27
【问题描述】:

这个函数在 UiThread 上运行,但似乎并不意味着它也可以访问活动上下文。我应该为我的 AsyncTask 实现一个公共 Setter 以传递活动(作为参考)吗?

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

【问题讨论】:

    标签: android multithreading android-activity android-asynctask


    【解决方案1】:

    我可以考虑两种选择。

    1. 如果 AsyncTask 是您的活动的内部类,您可以使用 getApplicationContext() 获取 Context 对象,而无需传递活动对象。
    2. 如果您必须从不同的方法访问 ImageView 对象,或者如果 AsyncTask 类处理的任务可以运行多次,您可能会考虑将 ImageView 对象存储为您的活动类的成员,因此您可以不需要访问它的上下文。

    【讨论】:

    • @1:我在一个新文件中创建了这个类,因为我想在我的所有活动中使用这个通用类。所以,我想那是行不通的。但是,我已经将 ApplicationContext 的引用存储在我的“AppController”中,我可以从代码的任何位置访问它。但是将ActivityContext传递给ApplicationContext并没有太大区别。或者,有吗?我有时觉得,ApplicationContext 有点慢。最重要的是,我实际上不认为你可以通过不是 Activity 上下文的 applicationContext 访问 findViewById-Method。
    • @2:所以在这里你建议我不要传递上下文,而只传递所需 ImageView 对象的引用。我认为这是一个好方法,因为我只需要“findViewById”的上下文。传递 Context 而不是只传递 ImageView 对象在性能方面是否更昂贵?
    • 好的,那么我猜选项 2 会是更好的解决方案。我不确切知道哪种对象类型需要更多资源,但对我来说,一个 Context 对象似乎比单个 ImageView 更“重”。
    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多