有人可以向我解释一下:
Intent intent = new Intent(Context, AlarmReceiver.class);
我从来没有理解,我认真地认为如果有人不试图向我解释这个问题,我永远不会理解。整个上下文的事情让我很困惑。有时它的工作原理如下:
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
有时它不会像那样工作,但它只接受:
Intent intent = new Intent(context, AlarmReceiver.class);
有时候:
Intent intent = new Intent(this, AlarmReceiver.class);
等。等许多其他。
我理解上下文的基础但有多少?为什么eclipse会一次又一次地给我一个错误呢?为什么我们有时需要声明上下文? :
Context context;
我无法为所有情况找到合适的背景,我怎么知道在任何情况下什么是正确的?
答案 0 :(得分:61)
首先,让我解释一下the context更好一些,然后让我们继续讨论如何使用和接收它。从本质上讲,上下文是指将资源链接到程序的参考。每个对象都有自己的上下文,其中包含设置该对象所需的资源。除了其他目的之外,还需要创建许多对象,并获得程序识别信息。这使得它非常有用,可以设置新的视图和活动,但它也可以用于其他目的。有关详细信息,另请参阅this answer。
项目的上下文可以来自各个地方。有时它被存储并且必须被检索,有时它被继承。基本上,这是面向对象的编程。
只是举几个例子:
Activity继承了上下文。因此,如果您在活动中,则只需要传递自己以使用上下文。它还包含指向getBaseContext()
的指针。如果您需要整个应用程序上下文,可能偶尔需要引用它,但很可能您暂时不会。
View不会继承上下文。但是,它确实有一个方法getContext()。如果您需要从视图中获取上下文,这是获取它的方法。此上下文不完整,但只包含视图内容的上下文。
Fragments也不会继承上下文。它们包含一个方法getActivity(),如果片段处于活动状态,它将返回活动,这是片段的上下文。
BroadcastReceivers也不继承上下文。实际上,它们根本不包含上下文,而只是在收到事件时接收当前上下文(例如onReceive(Context context, Intent intent))
答案 1 :(得分:8)
上下文功能
您可以安全地使用给定的Context对象执行的常见操作取决于它最初的来源。下面是一个应用程序将接收Context的常见位置表,并且在每种情况下它对它有用:
原创文章here。
答案 2 :(得分:5)
我通过上下文理解的是环境。简单来说,上下文是任何事物的环境。所以当你使用任何形式的上下文时,你必须决定你所使用的事物的环境应该是什么。上下文。
例如,如果您希望某些数据或字段保留在应用程序中,则应在应用程序类中定义它。
现在,当您在应用程序的任何组件中获得应用程序上下文时,您在应用程序类中声明的此字段将位于您的上下文中。您可以访问它。
所有上下文类型都是如此。
如果您尝试使用上下文“this”在服务组件中使用alertDialog。试试这个,我打赌您肯定会得到例外,因为“this”表示在其中使用时的服务环境。因为它是后台组件我们不能在那里添加窗口。因此它会告诉你坏的令牌异常。这意味着为周围视图生成的令牌不适合alertDialog显示。
希望这能让你简单了解自己想要什么。