可以使用哪些不同类型的上下文来代替活动?

时间:2019-06-12 21:28:36

标签: java android android-activity admob

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

adView = new AdView(this);

enter image description here

1 个答案:

答案 0 :(得分:1)

  

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

您略有错误。 this指的是您当前的对象。来自Java documentation

  

在实例方法或构造函数中,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,但忘记将上下文限制为仅活动:

public AdUtil {
  private AdUtil(){}

  ...

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

    ...
    return adView;
  }
}