2013-11-04 36 views
3

只是想知道爲什麼的實現者決定爲開發商通過上下文(即使系統服務似乎更像是爲開發人員提供了單,我們大多都不在乎):爲什麼LayoutInflater需要上下文?

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

我更多地提出這個問題的原因是,每當我玩上下文時,都會隱藏對內存/上下文泄漏的擔心。這裏是否存在處理上下文的可能性?

回答

4

在Android中,您的應用程序的上下文本質上就像連接到系統服務的管道。很多系統服務都是單身,但是你不能隨意訪問它們。 Context類作爲中間人接收並傳遞您需要的服務。

LayoutInflater.from(context);只需使用提供的上下文(它是您的應用程序的內容)並調用context.getSystemService()即可。

從本質上講,您的應用程序和Android是同時運行的兩個獨立的東西,Context作爲管道連接它們。

+0

謝謝,但我琢磨過的問題是,如果我錯誤管理這個「管道」(說我有一個靜態LayoutInflater與活動上下文);會導致內存泄漏?考慮到開發人員並不在意將他的應用程序與Android連接起來的事實 - 使用ApplicationContext不會是一個很好的默認設置(因此不會推動開發人員將任何參數作爲參數傳遞)?只是說! – SlowAndSteady

+0

@Raj您應該通過應用程序上下文訪問像LayoutInflater這樣的東西,因爲只要您的應用程序存在就存在。使用「活動」和「服務」上下文是不可靠的,因爲它們在「活動」或服務完成時死亡。 –

0

因爲每個android服務都需要上下文。 LayoutInflater是android服務。關於這個的另一個聲明;

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

按照Android文檔:

語境: 接口有關的應用程序環境的全局信息。這是一個抽象類,其實現由Android系統提供。它允許訪問特定於應用程序的資源和類,以及對應用程序級操作(如啓動活動,廣播和接收意圖等)的上調。

因此「上下文」保存不同的環境參數。這些參數是非常多的應用程序和系統依賴項。

「爲什麼實現者決定爲開發商通過上下文」

當您創建的任何活動或創建的任何對話或服務或任何東西則需要在Android的幾個不同的環境屬性。所以應該有一些東西可以提供所有這些信息,並且可以根據您的操作在內部執行不同的任務。在Android中,上下文就是這樣做的。

示例:如果您在Android中發送廣播,則它會在不同的活動和應用程序中被所有廣播接收器接收。這些東西你不管理,但你可以使用,一切都已經由Android管理,這是我們大多不關心的原因。

上下文由系統提供因此,我們並不需要非常小心地處理內存泄漏。如果你看起來不同的公開參數(http://developer.android.com/reference/android/content/Context.html),那麼你會發現,你可以設置或簡單得到的大部分東西。功能也是在應用程序級別沒有太多的系統級別。因此,泄漏你需要照顧你的代碼,而不是實際的上下文。