2012-01-13 47 views
7

我现在知道,如果我需要在一些静态函数中获得recource,我必须通过参数或静态变量以某种方式传递上下文或recurrent资源。但是为什么是必要的?资源的ID是在静态环境中可达,例如R.string.some_my_stuff。如果我需要系统资源,则通过Resources.getSystem().getString(android.string.some_common_stuff)也可以看到此资源。但为什么我不能做类似的工作来获取应用程序资源?资源文件是源代码的常用静态部分。资源是静态属于应用程序。应用程序类以相同的方式属于它,并且我可以使用以静态方式访问它们的静态部分。为什么无法以静态方式访问资源?

为什么我不能以相同的静态方式使用所有应用程序中的资源,这将是最自然的,但必须通过实例访问它们?

恐怕我不明白某件事很重要。

请不要再说我做不到。我知道这是我的荣幸。请解释为什么,或者告诉我方式......只有这样才能治愈我的悲伤:-)谢谢。

+1

您的资源属于您的应用程序,这是一个上下文。你可以做的是有一个应用程序类是一个单身人士,并从那里访问你的资源。另外,您如何在您无法访问任何上下文的地方需要资源? – njzk2 2012-01-13 09:11:38

+1

请注意,您无法获取那些未关注活动/视图加载的资源。 – adatapost 2012-01-13 09:15:55

+0

@njzk。我能达到的并不意味着我必须达到它。 2.在活动静态最终变量定义中,您无法访问上下文,但从资源中读取全局常量将很自然。 – Gangnus 2012-01-13 12:12:22

回答

3

资源ID对于每个应用程序都是唯一的,它们在所有应用程序(包括Android系统)中都不是唯一的。例如。在不同的应用程序中可能有两个不同的字符串,它们具有相同的ID,例如42. 因此,yon可以静态地只访问一个应用程序(每个程序员必须同意哪一个是Android系统(没有选择,它是唯一的一个始终安装))。对于所有其他应用程序,您必须能够告诉系统您要访问哪个应用程序的资源。你使用上下文来做到这一点。

+0

+1。你留言的第二部分有一个有趣的想法。但恕我直言,这不是答案。活动的实例上下文可以访问应用程序资源。对应用程序中的每个活动都是正确的。但是他们的类也属于应用程序。为什么只有活动的实例才能看到资源,而不是活动的类?他们**不属于Android系统。 – Gangnus 2012-01-14 20:38:11

+0

类中的静态信息在编译时生成。但是你不能在编译时识别应用程序,因为在那个时候你不能保证唯一的ID。只有由上下文表示的应用程序实例(在应用程序启动时生成)提供了一个唯一的ID,此时由Android系统生成。为了给你静态访问,启动器必须修改代码。 – Stefan 2012-01-15 08:00:22

+0

在我上面的评论中,用“class loading time”替换“编译时间”。这意味着类加载器将能够注入信息。但是,它没有。 – Stefan 2012-01-15 08:57:32

相关问题