2013-11-25 20 views
3

我有一個多活動應用程序並將數據保存在許多其他活動使用的主菜單活動。靜態變量真的是安全的跨應用程序中的活動android

我的一個主要活動的變量可能是這個

static double targetAngle = 45; 

我可能會調用該變量從另一個活動這樣

diff = Main.targetAngle - angle; 

或者我可以把它像這樣

Main.targetAngle = angle; 

從這個參考,http://developer.android.com/guide/faq/framework.html這似乎是一個正確的方式來傳遞數據。但是總是有關於隨時被操作系統殺死的活動的討論。

我的問題是,這是否安全?

作爲一種替代方案,我在SO成員的建議下,有一個名爲Helper的類,它有一些用於每個活動的函數,這些函數也有一些靜態數據。舉例來說,輔助類有這個數據,然後我的功能

public class Helper { 
static double[] filter1 = new double[]{0,0,0,0,0}; 
static double[] filter2 = new double[]{0,0,0,0,0}; 
static double cog = 0; 
    ... 
    various functions.... 
} 

我可以保存在輔助類我的共享變量是否會更好。這個課程每秒被調用一次,如果它被殺死了,我已經死了,真的需要重新思考。我應該提到,我對自己的工作沒有任何問題,但是我的一個用戶正在進行Nexus-7的崩潰,我們不知道爲什麼所以我認爲他可能會運行比我更多的應用程序,因此我的問題。

我還應該提到,如果用戶退出應用程序,我已經保存了任何需要保存在SD卡上的文件中的變量,以便它們可以重新加載。換句話說,應用程序被終止時丟失的數據不是問題。我的問題是,如果我的主要活動在應用程序還活着時被殺害了。

+0

活動類本身不會被操作系統破壞 - 類的實例可以實現。 因此,雖然您的活動實例可能會收集onDestroy回調和垃圾回收,但該Activity類的公共靜態變量仍將保留。 – selbie

+0

**「我的問題是,這是否安全?」** - 不!切勿在'Activity'中創建公共靜態字段(或方法)。始終使用助手或將數據作爲活動之間的Intent附加項傳遞。 – Squonk

+0

我認爲@selbie說這是可以的,Squonk說它不是。這很好奇。 –

回答

3

感謝selbie和squonk在評論中的答案。缺乏官方答覆或者我張貼我自己的,因爲我想關閉這個。

我的結論是,根據這篇文章 Using static variables in Android,靜態變量本身不會被破壞,我所做的是安全的。
這篇文章Clearing Static data onDestroy()指出:「只要該類被加載,靜態變量的值就會一直存在...... Android將卸載類的唯一原因是您的應用程序完全從內存中移除」

但是,正如squonk指出的那樣,這可能不是一個好習慣。使用不是活動的類來託管靜態全局變量和常用函數可能會更好,並且更容易維護並且通常更清晰。我會朝着這個方向發展,因爲它還有其他的優點。

在這兩種情況下,顯然當應用程序被銷燬時,變量將被重新初始化並需要手動重置。就我而言,我將數據存儲在SD卡中的文件中,這是保存數據的幾種方法之一。

我發現上面的鏈接帶有新的Google搜索。很明顯,我應該早些時候用這種措辭進行搜索,但是我的搜索沒有返回有用的結果,主要是找到單例與擴展應用程序辯論。

-1

static變量不能使用over通過Activity。正如你所說的,當你從另一項活動再次打電話給他們時,即使你分配了價值,他們也會變成初始值

使用SharedPreference或傳遞值Bundle

+0

我沒有說過,當他們從另一個活動再次打電話時,他們又變成了首字母,事實上他們沒有。他們保持自己的價值。正如我所說,該應用程序的工作,並已工作了一年多。我只是想知道是否有一些情況可能不會發生,但我自己並沒有看到這種情況。 –

+0

我的意思是如果您用作傳遞值,則在另一個活動中使用Helper類可能爲空。對不起,如果我錯了。但就我而言,我面對的就是這樣,所以我使用了'SharedPreference'。希望這篇文章對你有幫助。 http://stackoverflow.com/questions/9541688/static-variable-null-when-returning-to-the-app – Megamind

相關問題