2010-12-03 19 views
0

我有類似的問題,但答案並未完全解決我的問題。Android:在服務中調用某個方法(在同一活動中)

這是我正在做的事情:我有一個服務類,循環接收TCP連接。如果收到連接,可以讀取一個字符串。它可以是其中的一個:「開始」或「停止」。當「START」進入時,我創建(啓動)一個具有一些GUI的新活動,並且還有兩個線程(一個發送UDP數據包並記錄音頻,另一個接收UDP並播放音頻)。這個類包含2個套接字,一個AudioTrack對象和一個AudioRecord。

當Service類在TCP連接中收到一個「STOP」作爲其數據時,我想調用該Activity類中的一個方法(不是創建一個新類),關閉這兩個套接字並調用stop()和AudioTrack/AudioRecord對象上的release()。

現在,當我收到「停止」時,我只能創建一個全新的活動,所以這些對象不會被初始化。有沒有一種方法,實際上調用以前啓動的Activity中的方法?我能否保留對該活動(或意圖)的參考,並簡單地調用一個關於它的方法,還是必須更改我的整個設計?在這種情況下,歡迎提出建議。

謝謝

詹姆斯

回答

0

您可以設置START_FLAG_SINGLE_INSTANCE(我認爲這就是它叫什麼)的意圖的標誌,它會發送的意圖已經運行的活動。然後,您可以在活動中的onNewIntent()中獲得該意圖。

或者,爲什麼沒有服務管理套接字?

+0

我找不到標誌或類似的東西,除了Intent.FLAG_ACTIVITY_SINGLE_TOP。不知道這是否是正確的。這將是一個很好的解決方案,但代碼在兩個客戶端上運行,一個從服務啓動活動,另一個從一個活動啓動它,所以這是問題出現的地方。 – James 2010-12-03 22:43:02

0

根據我對活動和服務生命週期的理解,在我看來,您在活動中打開套接字的方法會給您帶來問題。

如果用戶旋轉設備,您的Activity將被銷燬,並且您的套接字連接在一起。一般來說,服務生命週期更適合解決您的問題。我同意法爾瑪利的建議。

Reference

相關問題