【问题标题】:what will be the difference if we start activity using application context instead of activity context?如果我们使用应用程序上下文而不是活动上下文来启动活动会有什么区别?
【发布时间】:2019-01-14 10:01:29
【问题描述】:
Intent intent = new Intent(activityContext,SomeActivity.class);
startActivity(intent);

我们可以使用applicationContext来代替activityContext吗,如果可以的话,新创建的activity会有什么不同。

我知道活动上下文和应用程序上下文之间的区别,但我想知道如果我们使用应用程序上下文启动它会如何影响活动。

【问题讨论】:

标签: android android-activity android-context


【解决方案1】:

现在令人困惑的是不同上下文的声明及其具体用法。为简单起见,您应该计算 Android 框架中可用的两种类型的上下文。

应用程序上下文活动上下文应用程序上下文附加到应用程序的生命周期,并且在应用程序的整个生命周期中始终相同。因此,如果您使用 Toast,则可以使用应用程序上下文甚至活动上下文(两者),因为可以从应用程序中的任何位置引发 Toast,并且不附加到窗口。

Activity 上下文附加到 Activity 的生命周期中,如果 Activity 的 onDestroy() 被引发,则可以将其销毁。如果要启动一个新活动,则必须在其 Intent 中使用活动的上下文,以便新启动的活动连接到当前活动(在活动堆栈方面)。但是,您也可以使用应用程序的上下文来启动新的活动,但是您需要设置标志 Intent.FLAG_ACTIVITY_NEW_TASK 以将其视为新任务。

现在参考您的案例:

activitycontext:虽然是指自己的类,继承了Activity类,但基类(Activity)也继承了Context类,所以可以用来提供Activity上下文。

getApplication()虽然是引用Application对象,但是Application类扩展了Context类,所以可以用来提供应用上下文。

getApplicationContext() 提供应用程序上下文。

getBaseContext() 提供活动上下文。

在使用 Intent 时选择活动上下文,对于 toast,您可以使用任何上下文。

【讨论】:

    【解决方案2】:

    新创建的 Activity 没有区别,因为它们都是 Context 的实例,但可以在你的应用程序中创建非标准的回栈行为,并且应用程序实例与应用程序的生命周期相关联,而 Activity 实例与Activity 的生命周期。 但总的来说,除非您有充分的理由不这样做,否则请使用活动上下文。

    【讨论】:

    • 如果没有区别,那为什么我们总是使用活动上下文而不是应用程序上下文来启动活动。
    • 应用程序可以从这里启动一个Activity,但它需要创建一个新任务。这可能适合特定用例,但可能会在您的应用程序中创建非标准的回栈行为,通常不推荐或不被视为良好做法。
    【解决方案3】:

    Application Context 和 Activity 上下文是 Context 类的实例。 Application Context是指Application的生命周期,Activity context是指Activity的生命周期。因此,要获取当前活动信息,您可能需要使用活动上下文而不是应用程序上下文。

    【讨论】:

    • 如果我们使用应用程序上下文而不是活动上下文启动活动会出现什么问题
    猜你喜欢
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多