我有一個網絡客戶端類,它接收一個大的二進制塊並將其解析爲一個可用的Java對象。網絡客戶端與應用程序的View不在同一個線程中。什麼是使該對象可用於視圖的最佳方式?我想出了以下解決方案,但我覺得他們都不是正確的:如何在Android中的活動中共享大對象?
- 創建網絡客戶端的對象,並讓視圖直接訪問它
- 我就送Handler中的一條小消息告訴View數據已更新
- Con:要求我在線程之間同步對象以確保Network View在View訪問時不會替換對象
- 序列化(?包裹)在網絡客戶端的對象,並通過處理器將其發送至搜索
- 臨:沒有數據
- 精讀的所有權的問題:很可能是一個巨大的性能負擔應用
- 創建對象的引用,並傳遞到視圖
- 我來自一個C++的背景,我不知道這甚至有可能在Java中。我是C++,我可以只發送一個指向該對象的指針並讓它處理它。這似乎是Java不會讓我做的事情。這是可行的嗎?
是否有任何這些解決方案的建議,或者我應該在一個完全不同的方式解決這個問題?
這是一個很好的問題,我沒有多少考慮。我想我的網絡客戶端需要成爲一個服務;如果我不在後臺下載,當應用程序恢復時,我正在監聽的套接字將完全充滿舊數據。由於我打算將網絡客戶端轉變爲服務,因此需要將希望與該活動共享的任何數據進行加密,請更正?沒有其他方法嗎? – Topher 2010-08-16 03:22:34
如果您使用的是本地服務,則可以創建getter和setter,並像任何其他對象一樣與服務進行通信。搜索本地服務以獲取更多信息。 – Janusz 2010-08-16 09:26:33
正如我所說,這取決於。如果他們在同一個進程中運行,底層實現將(我認爲)嘗試傳遞指針而不是複製數據。 – 2010-08-16 21:25:57