首页 > 解决方案 > 可以使用哪些不同类型的上下文来代替活动?

问题描述

我正在阅读 admob 中介文档,我看到了这一点,但我很困惑,因为我认为当你使用“this”时,它指的是你所在的活动。它说他们建议传入一个 Activity 实例,例如下面。我认为这是唯一可能的方式,任何人都知道我将传递的上下文不是我当前的活动的示例吗?

adView = new AdView(this);

在此处输入图像描述

标签: javaandroidandroid-activityadmob

解决方案


“我正在阅读 admob 中介文档,我看到了这个,但我很困惑,因为我认为当你使用“this”时,它指的是你所在的活动。”

你说的有点不对。this指的是您当前的对象。从Java 文档

在实例方法或构造函数中,this是对当前对象的引用——正在调用其方法或构造函数的对象。您可以使用 . 从实例方法或构造函数中引用当前对象的任何成员this

例如,this在匿名类中会引用对象类:

View view;
view.setOnClickListener(new View.OnClickListener() {
        @Override public void onClick(View v) {
          // this will refer to View.OnClickListener object.
        }
      });

我认为这是唯一可能的方式,任何人都知道我将传递的上下文不是我当前的活动的示例吗?

您还可以在Application类中创建 AdView,尽管我从未推荐过:

public MyApp extends Application {
  private AdView mAdView;

   ...
   public void createAdView() {
     // this will refer to MyApp which is a context.
     mAdView = new AdView(this);

     ...
     // the rest is history
   }
}

或者有人会创建一个 Util 来生成AdView但忘记将 Context 限制为 Activity:

public AdUtil {
  private AdUtil(){}

  ...

  // Here the parameter context can be Application, Activity, etc.
  public static AdView createAdView(Context context) {
    AdView adView = new AdView(context);

    ...
    return adView;
  }
}

推荐阅读