2013-04-23 80 views
1

所以,我正在製作一個應用程序,它在主類/活動中有一個處理程序。 我得到了警告,我應該聲明它是靜態的,以防止內存泄漏。
因此,我閱讀了一些解釋問題的文章,並且我知道理解它(並將處理程序更改爲靜態並使用弱引用)。從靜態方法更改非靜態值

但是,這裏來了我的問題:
我需要處理程序來更改某些非靜態變量(或調用一個方法)。我不想聲明這些變量是靜態的,因爲它沒有多大意義(它們應該屬於主類的實例,而不屬於類本身)。

我該怎麼做?

我已經看到一段代碼,其中有人創建了一個主類的實例,然後用它來改變非靜態變量的值或調用非靜態方法。 對我來說這似乎很奇怪,因爲當創建新實例並使用該實例中的變量時,我的程序如何知道我正在討論與我之前在程序中相同的「myInt」或「myString」。

原諒我,如果這是沒有意義的,或者如果我沒有解釋得很好,我還是福利局

+0

你需要一個'接口'。您的處理程序實現了一種更新方法,通知消費者何時發生了有趣的事消費者(類實例)實現相同的接口並在發生事件時接收回調。就像一個'onClickListener',但定義你的方式。 http://stackoverflow.com/questions/14660671/how-to-notify-an-activity-when-globalvariables-are-changed/14660808#14660808 – Simon 2013-04-23 18:36:37

回答

0

你可以保持一個參考主類的靜態變量(假設有隻有一個實例主要的類),否則你可以傳遞一個對主類的引用作爲靜態方法的一個參數

你是對的,你不想在靜態方法中實例化一個新的主類 - 不會影響主類的任何其他副本(除非您僅更改副本的靜態方法/屬性,在這種情況下,您應該可以在沒有主類的情況下執行此操作)

+1

這看起來像我什麼都沒有,但稍微複雜的靜態變量。 – Keppil 2013-04-23 18:16:49

+0

@Keppil我同意但我能做些什麼來解決我的問題?我應該創建一個值爲「this」的靜態變量嗎?我認爲必須有更好/更正確的方法來做我想做的事情 – whoami 2013-04-23 19:29:08

+0

@arijspieter:我認爲你有某種設計問題。據我所知,有一個靜態方法來更新非靜態方法沒有明智的方法,它不需要。 – Keppil 2013-04-23 19:32:51