为什么LayoutInflater需要上下文?

时间:2013-11-04 05:52:07

标签: android

只是想知道为什么实现者决定让开发人员通过上下文(即使系统服务看起来更像是开发人员的单例,我们大多不关心):

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

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

3 个答案:

答案 0 :(得分:4)

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

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

从本质上讲,app和Android是同时运行的两个独立的东西,Context添加为连接它们的管道。

答案 1 :(得分:0)

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

 LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

答案 2 :(得分:0)

根据android文档:

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

所以“上下文”拥有不同的环境参数。这些参数是非常多的应用程序和系统依赖。

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

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

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

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