首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在AsyncTask中获取上下文

在AsyncTask中获取上下文
EN

Stack Overflow用户
提问于 2013-06-04 22:51:04
回答 3查看 74.5K关注 0票数 85

我试图在我的AsyncTask中获取名为Opciones的类的上下文(这个类是唯一调用该任务的类),但我不知道如何做到这一点,我看到了如下代码:

代码语言:javascript
运行
复制
      protected void onPostExecute(Long result) {

    Toast.makeText(Opciones.this,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); 
}

但它对我不起作用,它说:"No enclosing instance of the type Opciones in scope"

EN

回答 3

Stack Overflow用户

发布于 2017-07-08 11:43:39

保持对主机活动的弱引用可以防止内存泄漏。

代码语言:javascript
运行
复制
static class MyTask extends AsyncTask<Void, Void, Void> {
    // Weak references will still allow the Activity to be garbage-collected
    private final WeakReference<Activity> weakActivity;

    MyTask(Activity myActivity) {
      this.weakActivity = new WeakReference<>(myActivity);
    }

    @Override
    public Void doInBackground(Void... params) {
      // do async stuff here
    }

    @Override
    public void onPostExecute(Void result) {
      // Re-acquire a strong reference to the activity, and verify
      // that it still exists and is active.
      Activity activity = weakActivity.get();
      if (activity == null
          || activity.isFinishing()
          || activity.isDestroyed()) {
        // activity is no longer valid, don't do anything!
        return;
      }

      // The activity is still valid, do main-thread stuff here
    }
  }
票数 62
EN

Stack Overflow用户

发布于 2013-06-04 22:59:35

由于只有一个Activity使用此任务,因此只需将其作为Activity内部类即可

代码语言:javascript
运行
复制
public class Opciones extends Activity
{
     public void onCreate()
     {
         ...
     }

    public class MyTask extends AsyncTask<>
    {
        ...

         protected void onPostExecute(Long result) {
        Toast.makeText(Opciones.this,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); 
     }
}

然后,您可以访问Activity及其Context的成员变量

票数 13
EN

Stack Overflow用户

发布于 2013-06-04 22:58:49

您可以编写getApplicationContex()。或者定义全局变量。

代码语言:javascript
运行
复制
Activity activity;

onCreate()函数中

代码语言:javascript
运行
复制
activity = this;

然后,

代码语言:javascript
运行
复制
 protected void onPostExecute(Long result) {

    Toast.makeText(activity,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); 
}
票数 -7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16920942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档