当前位置: 首页 > 面试题库 >

Android Intent Context令人困惑

翟曦
2023-03-14
问题内容

有人可以向我解释一下吗:

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);

等等等等等。

我了解上下文的基础,但是有几项?为什么日食会一次又一次地向我抛出错误呢?为什么有时需要声明上下文?:

Context context;

我无法在所有情况下都找到合适的环境,我怎么知道在每种情况下都合适的环境?


问题答案:

首先,让我解释一下上下文会更好一些,然后让我们继续介绍如何使用和接收它。本质上,上下文是将资源链接到程序的参考。每个对象都有自己的上下文,该上下文包含设置该对象所需的资源。除其他目的外,还需要创建许多对象并获得程序标识信息。这使得建立新的视图和活动非常宝贵,但也可以用于其他目的。另请参阅此答案以获取更多信息。

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

仅举几个例子:

活动继承上下文。因此,如果您处于活动中,则只需要传递自己即可使用上下文。它还包含一个指向的指针getBaseContext()。如果您需要整个应用程序上下文,则有时可能需要引用它,但是很可能不会有一阵子。

视图不继承上下文。但是,它确实具有方法getContext()。如果需要从视图中获取上下文,则这是获取上下文的方法。此上下文将不完整,而仅具有View内容的上下文。

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

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



 类似资料:
  • 问题内容: 我总是将If语句(在C#中)用作(1.替代); 我知道没有必要将“ == true”写为(2.替代)); 但是,我使用它是因为它更具可读性,并且不会引起性能问题。当然,这是我的选择,而且我知道许多软件开发人员都喜欢第一种选择。最佳用法是什么,为什么? 问题答案: 如果布尔值的名称清楚地说明了它的含义,那么我将始终选择版本2。但是,有时您会陷入一个特别晦涩的变量名,至少不能更改它。现在就

  • 我希望类中的方法在IO线程上运行一些代码,但只有一次它们订阅的主题具有特定值。然后调用者应该在AndroidUI线程上得到响应。 像这样的东西: 这有用吗?不确定,所以我写了一组单元测试来检查它们。我发现我的测试方法,尽管它们在一个接一个地运行时总是有效的,但作为套件的一部分会失败。 事实上,我发现如果我把同样的测试进行两次,第一次会通过,但第二次会失败! 为什么会这样?被测类中的bug是,还是测

  • 这是一个练习2D数组的练习,显然我在理解它们方面失败了。输入是创建一个方法,该方法在数组[][]中查找最大的沙漏形整数数。数组的大小总是6x6,因此循环是x<4和y<4,整数值也是从-9到9,这就是为什么我的结果变量以-256开始(如果我以0开始,充满负值的数组将不起作用) 样本输入 即产生输出的沙漏形状 然后在main中使用我的biggestHourglass()方法。 我的结果不符合预期,我不

  • 错误:错误:CreateProcess:没有这样的文件或目录 Gradle控制台中的详细日志是: 失败:生成失败,出现异常。 很高兴提到在这个错误之前,我有一个“在结构中重新定义”的错误。当我集中精力时,我发现在两个link.h文件中有两个类的重复定义,一个在项目中,另一个在我的sdk\ndk-bundle目录中。所以我在我的sdk中评论了link.h中的冲突,我就面临了上面的错误。但奇怪的是,当

  • 我这里有一个代码片段,基本上展示了Dan提到的想法,即提升react中的内容,以自然地提高性能并编写更简洁的代码。在InputField组件中,按钮总是呈现,这不是我想要的行为,它应该跳过呈现按钮组件。所以它应该做的是跳过渲染,因为按钮是inputfield的子道具,如果子道具没有改变,react将跳过渲染。 Dan解释的类似概念示例:“当颜色改变时,ColorPicker重新渲染。但它仍然有上次

  • 问题内容: 公共PrintWriter(OutputStream out,boolean autoFlush) : 公共PrintStream(OutputStream out,boolean autoFlush) : 问题答案: 我认为答案就在于Java的历史。三人,并在日期回Java 1.0。在此之前,该语言已经内置了对文件编码和字符集的严重支持。 引用Javadoc: “ PrintStre