如果我们使用应用程序上下文而不是活动上下文开始活动,会有什么区别?

时间:2019-01-14 10:01:29

标签: android android-activity android-context

Intent intent = new Intent(activityContext,SomeActivity.class);
startActivity(intent);

我们可以使用applicationContext代替activityContext,如果可以的话,新创建的Activity有什么区别。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

现在参考您的案例:

activitycontext:尽管它引用了扩展了Activity类的您自己的类,但是基类(Activity)也扩展了Context类,因此可以用来提供活动上下文。

getApplication()尽管引用了Application对象,但是Application类扩展了Context类,因此可以用来提供应用程序上下文。

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

getBaseContext()提供活动上下文。

在使用Intent时转到活动上下文,而在Toast中可以使用任何上下文。

答案 1 :(得分:0)

新创建的Activity没有区别,因为它们都是Context实例,但是可以在您的应用程序中创建非标准的Back Stack行为,并且应用程序实例与应用程序的生命周期相关,而Activity实例与活动的生命周期。 但通常,除非有充分的理由,否则请使用活动上下文。

答案 2 :(得分:0)

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