2009-12-21 201 views
12

我有一個由配置XML驅動的應用程序:各種 應用程序屬性在應用程序啓動時通過解析XML和初始化某些類的靜態變量來加載。從此 XML中讀取的數據驅動應用程序的不同活動。目前,我有 稱爲「解析和屬性初始化」從我主要活動的onCreate() 。Android應用程序初始化

我至於這種情況下/方法幾個問題:

  1. 我應該從應用程序 對象調用應用程序初始化方法或者是目前的做法是否正確?如果我選擇從 應用程序對象調用它,我們會得到/有什麼優勢/缺點?

  2. 我們真的需要一個靜態類來存儲應用程序屬性嗎?或者我們可以將所有屬性作爲應用程序對象中的靜態集合變量嗎?

  3. 在應用程序加載時解析XML(約200個節點)可能需要一些時間(而不是 )。我怎樣才能避免可怕的ANRs?我正在使用一個 Pull Parser。

請幫我看看這些問題的答案。

謝謝。

回答

4

Application對象用於跨應用程序共享非持久狀態。我認爲你根本不需要使用Application類。您可以在首先調用的ActivityonCreate()方法中進行初始化。至quote the documentation

該子類是可選的;大多數應用程序不需要一個。在沒有子類的情況下,Android使用基類Application類的一個實例。

您不需要創建自己的類來存儲應用程序屬性。這由SharedPreferences爲您完成。

您還應該查看setDefaultValues() method in the PreferenceManager 類,因爲這將設置XML文件中數據的偏好。這種方法的好處在於,使用readAgain參數,以便XML僅解析一次 - 第一次啓動應用程序時 - 而不是每次都解析。

10
  1. 這取決於你正在初始化什麼。應用程序的onCreate()應該用於在應用程序的任何部分正常工作並且只需要執行一次之前需要完成的事情,而Activity/Service/etc的onCreate()應該用於該組件所需的事情獨自一人,需要多次完成。

    我將所有初始化放到組件中的主要問題是,它會在以後增加您的應用程序的難度。假設你想讓你的應用程序中的某些Activity可以被外部意圖訪問 - 現在你必須將初始化代碼移動到Application上,或者你必須在非啓動Activity中複製初始化代碼。

  2. 聽起來你應該檢查出SharedPreferences,尤其是PreferenceManager.getDefaultSharedPreferences()。首選項將存儲在會話之間,並使您可以輕鬆訪問任何上下文中的簡單屬性。

  3. 螺紋加工。我發現AsyncTask是完成這個任務的最簡單的方法;有a good write-up on it at Google。或者,您可以啓動服務在後臺執行此操作,同時擁有前臺活動通知用戶您正在啓動應用程序。