2011-07-29 45 views
0

我目前正在使用解析器,並且每次調用onCreate時都會解析它。 我的解析器使用位於我的資產文件夾中的XML文件。僅在第一次啓動時解析XML一次

是否有任何機會讓我只能解析一次,而不是每次旋轉屏幕或重新啓動應用程序?

謝謝:)

回答

1

第一次完成解析時使用首選項系統存儲標誌,並在每次再次解析之前檢查該標誌。在你的OnCreate()方法中完成所有這些。

SharedPreferences settings = getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 
    if (!settings.getBoolean("parsed", false)) { 
     parseTheXML(); 

     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("parsed", true); 
     editor.commit(); 
    } 

還有其他的方法,但這有一個跨應用程序重新加載/電話週期的工作 - 假設這就是你想要的。

+0

謝謝,這似乎工作得很好,我確實想讓我的應用程序儘可能少用電池。 – Androider

2

這個問題有2個回答。最簡單的一個第一:

如果你只希望這一次發生,在主要活動創建一個靜態布爾並將其設置爲true時,XML在被解析然後使用:

if(!isParsed) 
    XML.parse(); 

越這個問題的完整答案是確保您正確處理配置更改。

我建議你閱讀this article關於如何實現配置更改處理。你應該能夠通過實現這個解決這個「Android方式」問題。

希望這會有所幫助!

+0

但是他應該在離開活動之前永久保存'isParsed'的狀態(例如'SharedPreferences'),並在每次應用程序啓動時檢查值。 – iDroid

+0

這聽起來像他想要在每個應用程序生命週期中解析XML一次,而不是在應用程序的整個安裝生命週期中一次。如果是這種情況,那麼共享首選是一條路。 – Codeman

+0

我確實希望它只能解析一次安裝的應用程序:) – Androider

1

您可以添加一個首選項。類似於 -

void setIsAppOpened() { 
    editor.putBoolean(APP_OPENED, true); 
    editor.commit(); 
} 

將它設置在您的onCreate()中。然後,添加以下代碼以檢查首選項是否存在。

if (!prefs.contains(APP_OPENED)) 
    { 
     //parse the XML 
     setIsAppOpened(); 
    }