android意图构造函数中`this`和`ActivityClass.this`有什么区别?

时间:2015-08-03 06:34:39

标签: java android mobile

传递给意图构造函数时,thisActivityClass.this之间有什么区别

例如给定2个活动:ActivityOne和ActivityTwo

以下不起作用(编译错误)

        @Override
        public void onClick(View v) {
            Intent intent = null;
            Log.i(TAG, this.toString());
            Log.i(TAG, ActivityOne.this.toString());
            intent = new Intent(this, ActivityTwo.class);
            startActivity(intent);
        }

虽然这有效

        @Override
        public void onClick(View v) {
            Intent intent = null;
            Log.i(TAG, this.toString());
            Log.i(TAG, ActivityOne.this.toString());
            intent = new Intent(ActivityOnethis, ActivityTwo.class);
            startActivity(intent);
        }

日志中的日志信息是

activitylab.ActivityOne$1@41fc5818
activitylab.ActivityOne@41fa2948

虽然它们不同,但传递活动的常见答案通常是使用this,我不是为什么我遇到这个问题

3 个答案:

答案 0 :(得分:7)

我假设您的onClick方法位于匿名类实例中(尽管您没有包含完整代码,但在打印ActivityOne$1时看到的this输出是如何显示匿名内部类),因此这指的是匿名内部类实例,而不是包含此实例的ActivityOne实例。

ActivityOne.this返回对包含ActivityOne实例的引用,这是您应该传递给Intent构造函数的内容。

答案 1 :(得分:1)

这是基本的Java,已回答here

回顾一下,如果一个类的实例在裸Class.this不可见时,可以使用this来引用该类的实例,例如来自内部类。在您的onClick示例this中,将引用您正在使用的Listener的匿名实例,而ActivityOne.this将引用包含该侦听器的ActivityOne实例。

答案 2 :(得分:0)

ActivityOne.this ==参考上下文

ActivityTwo.class ==引用类,这是它的类名

this ==它是Current Type,如果你在Thread中,那么它是Thread Type;如果您在活动中,那么它是活动类型;如果您在自定义类中,则它是该特定自定义类的类型

执行此操作时会出现错误,因为您不能在主线程中使用getApplicationContext()

当你使用myActivity.this它知道它将从这个活动的上下文开始。