我的應用程序,我想運行所有的時間,我通過讓服務啓動另一個線程完成,並響應請求發送到其Handler
本地服務。 綁定到服務將返回後臺線程的處理程序,以便客戶端活動可以發出請求。Android的本地服務綁定和後臺線程
到目前爲止這麼好。
我的應用程序使用Fragment
S的需要使用服務,以確定其初始狀態。當片段被實例化以響應用戶輸入時,沒關係,因爲那時服務被綁定到片段的父活動。也就是說,框架已經調用ServiceConnection.onServiceConnected
,並且該活動知道其片段可用於與服務通信的Handler
。
當我的活動被重新實例化以響應方向變化時,我的問題就開始了。從我的堆棧跟蹤中可以看出,在這種情況下,框架在主線程的消息循環中重新創建了所有活動片段,之前已調用ServiceConnection.onServiceConnected
,因此它們無法在娛樂中訪問該服務相。
,我發現的唯一的解決方案是公佈其後臺線程應用程序全局狀態相關聯的處理程序服務。 (我爲此目的劃分Application
,儘管還有其他技術。)我終究使用它的'線程'而不是'服務'。
這似乎是一個簡單而有效的方式做一些事情,看來Android想拍尷尬和複雜。除了通常對全球狀態的一般保留之外,我的方法忽略了哪些Android特定的考慮因素?或者有什麼更好的辦法來實現同樣的目標,我希望這是明確的?
謝謝。這使我走上了一條良好的軌道。我不想使用'IntentService',因爲我的後臺線程有特定的初始化,我不想再次發生,但'startService(Intent)'可能是我需要的。我對此沒有足夠的考慮。 – JulianSymes
其實我不認爲這會起作用,因爲我需要通過引用後臺線程的處理程序來傳遞任意對象,並且我不認爲我可以通過Intent機制傳遞這些對象。我需要把它們放入一個我發給Handler的消息中。 – JulianSymes
糾正我,如果我錯了,但不能讓你想要傳遞的對象實現Parcelable接口?這將允許您編組/解組這些對象,並將它們傳遞給新創建的IntentService上的Thread。看看這個鏈接如何做到這一點。 http://android-er.blogspot.com/2013/03/example-to-implement-parcelable.html – Emmanuel