2012-12-07 37 views
1

我的Android應用包括若干活動:M(主或根),ABC ... 下面是一個可能的活動導航圖表:機器人重新啓動應用程序

enter image description here

當我的根活動M正在初始化,我將一些參數(如屏幕尺寸)緩存爲特殊類MyUtils中的靜態變量,以便稍後在其他活動中使用它們。

Kaboom發生時,我按活動中的主頁按鈕說C,然後啓動一打應用程序。當我回到我的應用程序時,似乎所有東西都被破壞了。 C.onCreate方法正在被調用,但緩存的參數似乎被重置。

我想從M開始,而不是從C開始,因爲Android在長時間停頓後毀掉了我的應用程序。我怎樣才能做到這一點?

我認爲是這樣的:

// to be put into all my activities but M: 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (MyUtils.GetScreenWidth() == -1) 
    { 
     // seems like Android killed my app 
     finish(); 
     return; 
    } 
    // Normal initialization. 
    // Use MyUtils.GetScreenWidth() to align my ui elements. 
} 

...但我不知道這是最好的方式。你會建議什麼?

回答

2

說實話,我會做同樣的事情或類似於你在做什麼。一個可能更好的主意是有一個靜態的MyUtils.initialize()方法,可能需要一個應用程序上下文參數,在每個使用MyUtils的Activity的每個onCreate()處調用。

要麼,要麼將這些值存儲在SharedPreference中。

+4

我在一年前遇到類似問題,並將值存儲在SharedPreference中解決了問題。 – Durus

0

這不是一個真正聰明的意思,但你可以將這些信息存儲在其他地方,如數據庫或只是一個文件,然後在需要時檢索它。

2

除非您需要用戶與前門活動交互(例如,再次驗證用戶身份),否則您可能不想這樣做。

如果您確實想要強制他們通過前門活動回來,那麼您可以使用Intent在您檢測到您在其他活動中已啓動新流程時啓動它。您可能需要花一些時間閱讀Intent標誌的文檔以選擇適用於此用法的文檔。