Android意图上下文令人困惑

use*_*779 54 java android android-intent android-context

请有人向我解释一下:

Intent intent = new Intent(Context, AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)

我从来没有理解过,我认真地认为如果有人不试图向我解释这个问题,我永远不会理解.整个上下文的事情让我很困惑.有时它的工作方式如下:

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)

有时它不会像那样工作,但它只接受:

    Intent intent = new Intent(context, AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)

有时它:

Intent intent = new Intent(this, AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)

等等等等.

我理解上下文的基础但有多少?为什么eclipse会一次又一次地给我一个错误呢?为什么我们有时需要声明上下文?:

Context context;
Run Code Online (Sandbox Code Playgroud)

我无法为所有情况找到合适的背景如何在每种情况下知道什么是正确的?

Pea*_*oto 63

首先,让我解释一下上下文有什么好处,然后让我们继续讨论它是如何被使用和接收的.从本质上讲,上下文是指将资源链接到程序的参考.每个对象都有自己的上下文,其中包含设置该对象所需的资源.除了其他目的之外,还需要创建许多对象,并获得程序识别信息.这使得它非常有用,可以设置新的视图和活动,但它也可以用于其他目的.有关更多信息,请参阅此答案.

项目的上下文可以来自各种各样的地方.有时它被存储并且必须被检索,有时它被继承.基本上,这是面向对象的编程.

只是举几个例子:

活动继承上下文.因此,如果您在活动中,则只需要传递自己以使用上下文.它还包含一个指针getBaseContext().如果您需要整个应用程序上下文,您可能偶尔需要引用它,但很可能您暂时不会.

View不继承上下文.但是,它确实有一个方法getContext().如果您需要从视图中获取上下文,这是获取它的方法.此上下文不完整,但只包含View内容的上下文.

片段也不继承上下文.它们包含一个方法getActivity(),如果Fragment处于活动状态,它将返回活动,该活动是Fragment的上下文.

BroadcastReceivers也不继承上下文.实际上,它们根本不包含上下文,而只是在收到事件时接收当前上下文(例如onReceive(Context context,Intent intent))

  • 那BroadcastReceiver类的方法呢?由于找不到合适的环境,它需要什么样的环境? (2认同)

Che*_*ead 9

上下文功能

您可以安全地使用给定的Context对象执行的常见操作取决于它最初的来源.下面是一个应用程序将接收Context的常见位置表,并且在每种情况下它对以下内容有用:

在此输入图像描述

  1. 应用程序可以从此处启动活动,但它需要创建新任务.这可能适合特定的用例,但可以在您的应用程序中创建非标准的堆栈行为,通常不建议或认为是良好的做法.
  2. 这是合法的,但通货膨胀将使用您运行的系统的默认主题完成,而不是在您的应用程序中定义的内容.
  3. 在Android 4.2及更高版本上,如果接收方为空,则允许用于获取粘性广播的当前值.

原文在这里.


kau*_*edi 5

我通过上下文理解的是环境.简单来说,上下文是任何事物的环境.所以当你使用任何形式的上下文时,你必须决定你应该使用上下文的事物的环境.

例如,如果您希望某些数据或字段保留在应用程序中,则应在应用程序类中定义它.

现在,当您在应用程序的任何组件中获得应用程序上下文时,您在应用程序类中声明的此字段将位于您的上下文中.您可以访问它.

所有上下文类型都是如此.

如果您尝试使用上下文"this"在服务组件中使用alertDialog.尝试这个并且我打赌您肯定会得到例外,因为"this"表示在其中使用时的服务环境.因为它是背景组件我们可以'在那里添加窗口.它会告诉你坏的令牌异常.这意味着为周围的视图生成的令牌不适合alertDialog显示.

希望这能让您简要了解自己想要什么.