4

只是想知道为什么实现者决定让开发人员传递上下文(即使系统服务对于开发人员来说似乎更像是一个单例,我们大多甚至不在乎):

LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(layout);

我之所以问这个问题更多是因为每当我使用上下文时都会隐含地担心泄漏内存/上下文。这里是否存在错误处理上下文的可能性?

4

3 回答 3

5

在 Android 中,您的应用的 Context 本质上就像一个将其连接到系统服务的管道。很多系统服务都是单例的,但是你不能随意访问它们。Context 类充当中间人来接收和传递您需要的服务。

LayoutInflater.from(context);只需context.getSystemService()使用提供的上下文(即您的应用程序的上下文)进行调用。

从本质上讲,您的应用程序和 Android 是两个同时运行的独立事物,而 Context 作为连接它们的管道添加。

于 2013-11-04T06:21:54.010 回答
1

根据android文档:

上下文: 有关应用程序环境的全局信息的接口。这是一个抽象类,其实现由Android系统提供。它允许访问特定于应用程序的资源和类,以及向上调用应用程序级操作,例如启动活动、广播和接收意图等。

所以“上下文”持有不同的环境参数。这些参数在很大程度上取决于应用程序和系统。

“为什么实施者决定让开发人员传递上下文”

当您创建任何活动或创建任何对话框或服务或任何东西时,它需要 Android 中的几个不同的环境属性。所以应该有一些东西可以提供所有这些信息,并且可以根据您的操作在内部执行不同的任务。在 Android 中,上下文可以做到这一点。

示例:如果您在 Android 中发送广播,那么它也会被不同活动和应用程序中的所有广播接收器接收。这些你不管理但你可以使用的东西,一切都已经由 Android 管理,这就是我们大多不在乎的原因。

上下文是由系统提供的,所以我们真的不需要过多关注内存泄漏。如果您会查看不同的公共参数(http://developer.android.com/reference/android/content/Context.html),那么您会发现大部分内容您可以设置或简单获取。功能也处于应用程序级别,系统级别不多。所以泄漏你需要照顾你的代码,而不是真正的上下文。

于 2013-11-04T06:33:15.687 回答
1

因为每个 android 服务都需要上下文。LayoutInflater 是安卓服务。关于此的另一个声明;

 LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
于 2013-11-04T06:16:20.373 回答