2
A
回答
0
這樣做的最佳做法是什麼?擴展應用程序類或 使自定義單例類?
- 三思而後這些變量是否是真正的全球和他們要活動之間共享。
- 如果第一個問題的答案是'是',那麼最好的地方是將它們存儲在
Application
中。
您可以實現單過,但1)它稍微難以測試和b)如果你的全局變量需要Context
,然後再次Application
例如將適合最好。
3
在應用程序類中存儲某些內容的問題是,您無法依賴於應用程序對象的同一實例中正在恢復的活動。例如,一個活動可以暫停,應用程序被殺死(由於內存)以及您在實例中對對象進行的任何更改,然後該活動將恢復爲新的應用程序實例。
這是一個非常好的博客文章,解釋存儲在應用程序級的數據如何可能會丟失: http://www.developerphil.com/dont-store-data-in-the-application-object
我不知道這是非常「最佳」的做法,但我認爲這是一個很好的解決方案
我有一個PersistData類保存應用程序範圍的「全局」。我使用Dagger將這個單例的實例注入任何需要這些變量的類。
的基本過程是這樣的:
當我通過像保存在這個對象的值:
mPersistData.saveEmailId("[email protected]");
- 我第一次寫在SharedPreferences條目
- 我然後保存它到一個成員變量
在該類的構造函數中,我初始化通過從SharedPreferences中讀取成員變量。 這種方式讀取的變量是「緩存」的,即它們不需要從SharedPreferences讀取,並且如果應用程序被終止並重新啓動,則成員變量具有正確的值。如果你只是在應用程序類中保存這些值,那麼當應用程序重新啓動時,成員變量將是無效的(不是你期望的甚至爲空)。
下面是一個例子:
public class PersistData {
private String email;
public PersistData(MyApp app) {
mApp = app;
email = readEmailId();
}
public void saveEmailId(String emailToSave) {
writeEmailId(emailToSave);
email = emailToSave;
}
private void writeEmailId(String emailId) {
generalSettingsFileEditor.putString("USER_ID", emailId);
generalSettingsFileEditor.commit();
}
public String readEmailId() {
String emaiId = generalSettingsFile.getString("USER_ID","");
return(emaiId);
}
public String getEmail() {
return email;
}
}
在我的應用程序匕首模塊我有這樣的:
@Provides @Singleton
public PersistData providePersistData() {
System.out.println(String.format("mApp = %s", mApp));
return new PersistData(mApp);
}
然後,每當我需要訪問這些變量我注入單身爲這樣的:
public class HomePresenter {
@Inject
PersistData mPersistData;
...
mPersistData.saveEmailId("[email protected]");
myEmail = mPersistData.getEmailId();
...
}
相關問題
- 1. 在活動之間共享httpClient實例的最佳方式?
- 2. 在ASP.NET和Silverlight 2之間共享DAL的最佳實踐
- 3. 在多個表格之間共享關係的最佳實踐
- 4. 在項目之間共享類的最佳實踐
- 5. 在類之間共享LDAP連接 - 最佳實踐?
- 6. 全球變量的Python最佳實踐
- 7. Rails全局變量:是http請求之間的全局變量共享嗎?
- 8. 在backbone.js中使用全局變量..最佳實踐
- 9. PHP全球變量或最佳實踐
- 10. 共享的NSDateFormatter - 最佳實踐?
- 11. 共享的元素,最佳實踐
- 12. 在Python中的類之間共享全局變量
- 13. 如何在導入的模塊之間共享全局變量?
- 14. clojure全局變量的最佳實踐(參考vs alter-var-root)?
- 15. 對象中全局變量的最佳實踐-php
- 16. React.js中全局變量聲明的最佳實踐是什麼?
- 17. 在多個Thor任務上共享全局數據的最佳實踐
- 18. 最好的/你在Python中的實踐共享全局變量,共享函數和類
- 19. 在類之間共享Java變量的最佳方式
- 20. 在.c文件之間共享全局變量
- 21. 在Lua車道之間共享一個全局變量
- 22. 在兩個進程之間共享全局變量
- 23. 在兩個項目之間共享全局變量
- 24. Javascript:在.js文件之間共享全局變量
- 25. 在頁面間共享數據的最佳實踐
- 26. 查看模型(ViewData),UserControls/Partials和全局變量 - 最佳實踐?
- 27. TypeScript:全局靜態變量最佳實踐
- 28. Pyramid中的所有請求之間共享的全局變量
- 29. 活動之間交互的最佳實踐
- 30. 片段和活動之間的溝通 - 最佳實踐
你能解釋一下你究竟想要達到什麼樣的目的或解決什麼問題嗎? – Asahi 2014-10-12 10:55:38
使用'Application'類https://www.intertech.com/Blog/androids-application-class/ – 2017-12-21 04:13:26