2012-01-13 96 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

相關問題