2012-10-10 170 views
0

管理生命週期我有具有以下對象IP客戶端應用程序:爲IP客戶端應用程序

  1. Socket例如連接到IP服務器。

  2. Thread實例,執行ThreadFunction。連接時,此功能可持續讀取插槽。

現在我正在嘗試瞭解當重新創建活動(例如,更改屏幕方向後)時該怎麼辦。 Socket實例是否丟失? ThreadFunction會發生什麼?看着對方的行爲(IP服務器),我發現客戶端Android應用程序沒有斷開連接。那麼,在這種情況下,我的策略應該是什麼:我應該再次創建這些資源,還是嘗試通過某種方式恢復它們?

+0

爲什麼不在服務來運行所有這一切?那麼你就沒有活動破壞的問題。 – AedonEtLIRA

+0

@AedonEtLIRA - 因爲我還沒有學習服務:)我將嘗試稍後實施此建議,現在,我希望在此應用程序中獲得一致的行爲。謝謝。 –

+0

是的。 :)服務將正是你所需要的這種情況。它們旨在處理任何長期的後臺操作。 Socket IO絕對是後臺操作。 – AedonEtLIRA

回答

1

您的問題的答案與應用程序被銷燬時資源會發生什麼有關,即一切消失,包括套接字和可運行子。

即使從服務器端,只要服務器嘗試通過它進行通信,套接字就會消失。

您所說的最好的解決方案就是使用服務來管理它。這與使用一項活動非常相似,我會安排您參閱一些示例。

如果你真的想要做什麼,你現在已經不使用的服務一致,可以禁用屏幕旋轉增加android:configChanges="orientation"AndroidManifest.xml

+0

謝謝。我想在onSaveInstanceState中斷開連接並將當前狀態(如IP地址和端口)保存在Bundle中。當活動重新創建時,我想使用Bundle信息再次連接。可以嗎? –

+0

當然,我明白服務是真正的解決方案,但我仍然想完成這個程序。 –

+0

它應該沒問題。請記住,如果要保留客戶端身份,則必須讓應用程序處理雙方(服務器和客戶端)的重新連接,因爲通信將移至一對新的套接字。 – Luis