最近我被告知擴展應用程序類以便將其用作單例程是一種不好的做法,但沒有任何解釋。
那麼使用這個類的潛在問題是什麼?我已經看到它在很多項目中使用。擴展應用程序類和良好實踐
另外,如果使用Application Class是一個壞主意,那麼存儲應用程序級別變量的替代方法是什麼?
最近我被告知擴展應用程序類以便將其用作單例程是一種不好的做法,但沒有任何解釋。
那麼使用這個類的潛在問題是什麼?我已經看到它在很多項目中使用。擴展應用程序類和良好實踐
另外,如果使用Application Class是一個壞主意,那麼存儲應用程序級別變量的替代方法是什麼?
使用Singleton類以及擴展Application
類的問題是,如果應用程序進程被終止 - 當應用程序在後臺駐留時間過長時很可能發生這種情況 - 對象將全部丟失你的數據。
但是,在您的應用程序處於前景或不在背景中(儘管不是100%無風險)的情況下,使用Application
類可能是一個不錯的選擇。
或者,您可以將數據保存到SharedPreferences
,或者如果您的對象更復雜,請將其保存在database
中。
另一種選擇是結合使用Application
加上SharedPreferences
。首先嚐試從Application
實例中檢索變量,如果變量爲空,則從SharedPreferences
檢索它。
使用Singleton方法並不是一個壞主意,但在多線程環境中使用時可能會遇到麻煩,在這種情況下,一個線程將值設置爲變量,另一個線程可能會覆蓋價值沒有任何通知。
然而,爲了保持應用程序級實例/變量,故建議延長Application
類,並在您的AndroidManifest.xml中將其定義爲默認值。由於應用程序的上下文中創建只有一次(直到應用程序正在運行,並保持在內存中),當您啓動該應用程序,讓您可以定義類裏面的一些變量,使他們在您的應用程序的代碼使用public方法在任何地方速效。
此外,您也可以使用您的應用程序類作爲Singleton,因爲它保證在啓動時只創建一次。
我以前單身的做法和工作對我來說太棒了。但是,正如你所說,在多線程環境中要小心。 –
謝謝您的回答。我想我會選擇混合方式。當它可以避免時,我不會從磁盤讀取數據。 – Teovald