我已經閱讀了很多關於單身人士在android.so中如何易受攻擊的博客。我的問題是如何在應用程序中維護這樣的全局對象或列表。我知道共享偏好是一種方式,但有什麼方法可以維護這樣的對象或有效地列出。任何幫助將更有幫助。管理全局對象或列表
回答
您可以使用文件或SQLite數據庫在Android應用程序中保存數據。您可以查看以下鏈接,瞭解更多關於文件或SQLite數據庫保存數據:
將數據保存到一個文件是理想的存儲數據的長序列,其通常按順序閱讀 https://developer.android.com/training/basics/data-storage/files.html
將數據保存到數據庫中是理想的重複或結構化數據: https://developer.android.com/training/basics/data-storage/databases.html
如果你只是想保持一個列表,全球直到你的應用程序正在運行,然後創建一個新的類,讓我們說的「助手」和初始化聖atic在該類中的列表。現在,您可以通過「Helper.yourStaticListName」在應用程序的任何位置訪問該列表,您還可以在應用程序的任何位置添加/刪除或從列表中獲取數據。 但是,如果您想要在應用程序關閉時保留該列表,那麼有兩種解決方案。 首先在你的應用程序中創建一個本地數據庫「SQLite文件」,並添加/刪除或從中獲取數據。
檢查本教程:http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/
第二種解決方案是將數據轉換成JSON和JSON轉換成字符串,並將其保存在共享偏好。只要您需要它,只需從共享首選項獲取字符串並將其轉換爲JSON並解析即可獲取數據。 當你談論解析一個JSON時,最後一件事是「GSON庫」,這是一件好事。
這裏是鏈接:http://guides.codepath.com/android/leveraging-the-gson-library
希望這個答案會幫助你。
@ Zohaib Hassan存儲在偏好是不是很好的做法? –
這取決於你的要求。如果你想在單個設備中使用你的數據,並且需要這些數據,直到你的應用程序安裝在特定設備中,並且如果你的數據沒有佔用太多空間(就像String格式的Json佔用非常小的空間)那麼共享偏好是一個不錯的選擇。但請記住,存儲在「共享首選項」中的數據不安全,因爲其他應用可以在未經您許可的情況下輕鬆訪問和修改您的數據。 –
服務僅用於後臺操作,不用於存儲變量。 –
@vipinagrahari儘管它可以用作存儲單身/共享首選項以外的對象的選項。你可以提出什麼建議? – Erwin
從具有靜態變量或服務定位器概念點很相似,具有單身。因此,如果意圖是避免全球狀態和後果,那麼將它們作爲替代品可能並不正確。
我們可以改變的Singleton類成的情況下,按照需要被實例化一次,並注入到組件和方法。我們可以手動使用的IoC框架來處理注入部分或做它用工廠模式來構造(我們可以限制只有一個實例的創建以及)的類的實例。這discussion thread提供了很多有關問題和各種選項的見解。
所以,如果我理解你的問題的權利,你需要一些全局變量存儲在你的應用程序,如果是如此,請看看this question
基本上你創建一個擴展應用程序,它會存儲任何你將一個類就像開始你的應用程序一樣,所有這些都可以通過應用程序訪問。
希望這有助於。
使用sharedPreferences,Sqlite數據庫來管理你的對象,單身不是很好,但靜態變量更難以維護,並且會使測試更加困難,你可以使用Shared首選項來維護一個全局狀態,如果數據不是很大,如果數據量很大,那麼建議使用sqlite。
共享偏好是非常容易使用,如果你有使用SQLite雖然你可以使用Android的
ORM庫問題,這裏有一個鏈接到一個:http://greenrobot.org/greendao/
如果你想創建一個全局訪問對象你應該問自己的第一件事是:爲什麼?爲什麼你需要一個全球可訪問的對象?大多數時候你都不會,而且你可以通過創建一個範圍有限的對象來繞過應用程序。
有些時候,你確實想要全球可訪問的資源,並且使用單例只是實現這一目標的一種方法。按照Android Docs您的數據存儲選項包括:
共享偏好
店專用的原始數據中的鍵值對。
內部存儲
Store上設備內存的私有數據。
外部存儲
存儲在共享外部存儲公共數據。
SQLite數據庫
存放在私有數據庫結構化數據。
用自己的網絡服務器在網絡上的網絡連接
存儲數據。
單身人士很棒,但是他們根據自己的實施方式有自己的風險。通常,開發人員在您試圖在應用程序內共享資源時使用此模式,例如Loggers
,Print spoolers
等。您可以使用多種方法在Java中創建Singletons
,您可以使用Lazy Initialization或Static初始化,每個方法都有它們的自己的親/就「脆弱性」而言,單身人士是否線程安全,誰可以訪問它,等等都存在問題。這就是爲什麼試着理解你正在努力解決的問題是有道理的。就我個人而言,我不清楚你到底想要解決什麼問題,所以我不能詳細說明這會如何幫助或傷害你。我只能說,最大的漏洞也是最大的資產,就像大多數全局變量一樣,它可以隨時隨地訪問。單身人士是否是線程安全的也可能存在問題。
就我個人而言,我認爲您需要評估您嘗試解決的問題,並選擇合適的解決方案。也許使用單身是正確的解決方案,也許不是。但理解你所有的選擇和每個人的優勢/劣勢將是解決這個問題的最好方法。不幸的是,您沒有爲我或任何人提供足夠的背景給您一個可靠的建議。
管理全局對象的最好方法是根本沒有它們。根據我的經驗,在很多情況下,有替代選擇,而不是單身。有這麼好的解釋in this post
共享的偏好是好的,但有些時候你會感覺到問題的時候做一些修改,使一個POJO Java類的靜態常量變量和使用這個變量anywhere.because共享偏好使用後也不會改變價值或除非你修改.shared偏好檢索和存儲不是非常不友好。如果你使用常量,你可以很容易地修改。只有一個類你必須擊中
- 1. 被管理類型的全局對象
- 2. 全局「類對象」或全局「服務器對象」
- 3. 創建全局列表對象Java
- 4. 陣列和全局對象
- 5. 依賴注入與管理的相關性與全局對象
- 6. 更改Google標記管理器中的全局GA對象
- 7. 使用THREE.JS對象的全局數組的Javascript內存管理
- 8. Javascript全局變量或對象變量
- 9. 管理的陣列或管理對象的陣列在Visual C++/CLI
- 10. JavaScript全局對象?
- 11. Java「全局」對象
- 12. C#全局對象
- 13. 「超全局對象」
- 14. C++全局對象
- 15. 全局對象iphone
- 16. 玫瑰:: DB ::對象::管理器查詢與對象ID列表
- 17. 使用python類變量來管理全局列表(池)
- 18. JavaScript全局對象和全局範圍
- 19. flex中的全局安全管理器
- 20. STL容器與內存管理 - 對象列表與對象指針列表
- 21. 管理對象
- 22. 管理對象
- 23. 全局對象和頭部全局對象有什麼區別?
- 24. 創建一個全局對象或多個本地對象
- 25. 更改Django管理列表佈局
- 26. NSFetchedResultsController對同一管理對象(表)
- 27. JavaScript全局對象vs窗口對象
- 28. 傳遞對象列表或ArrayList對象
- 29. 如何聲明一個全局列表對象
- 30. 將元素添加到scala中的全局列表對象
你應該提供一些關於這個問題的細節。您想做什麼?你已經做了什麼? – pouya