【问题标题】:Use of Context to start another Activity使用 Context 启动另一个 Activity
【发布时间】:2012-02-10 12:32:57
【问题描述】:

要启动 Activity,您需要一个 Intent,例如:

Intent i = new Intent(context, class)

所以要填写上下文参数,有几个选项可用:

  • 使用MyActivity.this 或只使用this
  • 使用getApplicationContext()
  • 使用getBaseContext()

而且我敢肯定还有一两个选择。 这些选项都出现在某种教程中,一个使用第一个选项,下一个使用第三个选项。

那么我应该使用哪一个?这还重要吗?不同情况有区别吗?

【问题讨论】:

    标签: android android-context


    【解决方案1】:

    是的,不同的情况不同,

    这取决于范围。假设如果你在一个全局类中创建一个方法,extends Application 创建一个在你的Application 的每个类中使用的Toast,你可以使用getApplicationContext() 来创建它。

    如果您想创建一个仅限于该特定活动的视图,您可以使用Activity.this

    另外,如果你想在某个内部类中创建一个 AlertDialog,比如AsyncTask,那么你必须使用Activity.this,因为AlertDialog 将链接到Activity 本身。

    也不要使用getBaseContext(),只需使用您拥有的Context。要获得更多信息,您可以查看this Answer

    所以,真正的问题的答案最好使用Activity.this 来开始一个新的Activity

    Intent intent = new Intent(Current_Activity.this, Calling.class);
    startActivity(intent);
    

    【讨论】:

      【解决方案2】:

      它们肯定是不同的。这些是不同的上下文,应该在尽可能少的范围(上下文)中使用。

      例如,如果我们可以使用 Activity 的 Context 而不是 ApplicationContext,则应该使用 Activity 上下文,同样适用于应用程序上下文和基础上下文。

      【讨论】:

      • 这是真的,但不适用于getBaseContextgetBaseContextContextWrapper 类的方法。开发人员无法明确知道它包含了哪个上下文。
      • 这是有道理的,但我很好奇这句格言的“为什么”。从另一个活动或应用程序上下文启动一个活动之间是否存在功能差异?
      【解决方案3】:

      你是这样做的......

      Intent intent = new Intent();
      intent.setClass(MainActivity.this, SecondActivity.class);
      startActivity(intent);
      

      【讨论】:

      • 我猜 OP 知道 SmartLemon :)
      • 请在回答之前阅读整个问题,而不仅仅是前几个 (?) 字:)
      • 我确实阅读了整个内容,问题得到了解答,您使用 Activity.this 如上所示。
      • “那么我应该使用哪一个?这有关系吗?不同的情况会有所不同吗?”
      猜你喜欢
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2017-06-14
      • 2017-04-11
      • 2011-11-27
      相关资源
      最近更新 更多