2010-09-23 177 views
0

我想在我的Android應用程序中擴展應用程序。我這樣做是爲了創建一個名爲MyApplication的擴展應用程序對象並將其添加到清單。擴展應用程序

我現在想添加一些getters和setter來保存一些信息。它看起來像我需要將應用程序上下文傳遞給任何不包含上下文的類。

例如,假設我創建一個名爲myObject的類(在它自己的Java文件):

public class MyObject { 
    public void doStuff() { 
    // do stuff 
    } 
} 

如何可能我從doStuff訪問所有MyApplication()?看起來我需要將應用程序上下文傳遞給MyObject。這是典型的嗎?是否有泄漏的可能性?

另外,爲了確保我很清楚,MyApplication(以及其中的變量)是否會貫穿整個應用程序的生命週期,或者不是?無論哪種方式都很好。如果需要的話,我只想確保我解釋清楚。

最後,任何指向某些示例源的鏈接,以顯示擴展應用程序有什麼不同的東西,將不勝感激。

回答

7

據我所知,傳遞上下文在Android開發中並不例外。那麼,要麼我做錯了。

我不知道,如果你需要這個回答與否,而是從上下文,你可以訪問Application對象是這樣的:

((MyApplication) context.getApplicationContext()).getMyGlobalVariable(); 

MyApplication類應該生活在整個應用程序生命週期,是。

也檢查出this answer

+1

謝謝你的迴應。我在IntentService(我可以訪問應用程序的上下文)中完成大部分的重要工作,其他大部分對我的全局數據的調用將來自Activities;所以我覺得我會沒事的。任何其他地方(如我的OP示例中),我只能傳遞數據。 – Andrew 2010-09-23 15:46:44

+0

我試圖在一個不是活動的類中獲取對MyApplication對象的引用,所以我無法使用典型的(MyApplication)this.getApplication()。這是您的建議幫助很大的地方,我剛剛通過了上下文並獲得了MyApplication的參考,謝謝TON! – Soham 2011-10-23 16:46:52

1

只要您傳遞了正確的上下文,傳遞上下文在Android中就很好。避免將活動作爲上下文傳遞。改爲使用getApplicationContext()

您的應用程序對象以及與其相關的所有數據將在應用程序的整個生命週期中持續存在。即使應用程序處於後臺,並且所有活動都會從內存中清除,因爲它們不再顯示。在什麼時候應用程序對象將從內存中清除的記錄不是很好,但我認爲如果您的應用程序在後臺並且內存很少,操作系統可能會銷燬您的整個應用程序,因此也會從內存中刪除應用程序對象。

如果無法訪問上下文,則無法獲取應用程序對象。如果您只需要對應用程序進行引用,只需傳遞應用程序對象,就可以最大限度地減少可能出現的錯誤,從而節省對不在屏幕上的活動的引用,並通過此引用泄漏整個活動。

我沒有任何示例代碼,但我用它來保存對某些任務的引用。這使我能夠允許用戶在活動之間快速切換,而無需等待任務返回,即使下一個活動必須根據當前正在運行的任務更改某些狀態。

+1

只是關於傳遞getApplicationContext()的說明。不要用它來啓動打開網頁的意圖 - 它會拋出異常。 :) – benvd 2010-09-23 19:50:23