2012-11-15 17 views
1

之前開始這是一個情況, 我有啓動的服務的機器人活動(該服務是爲了發送/接收文件等)。通過在Activity類對象中創建的處理程序將服務sendMessage()發送到Activity。 然後,活動顯示當前操作服務正在對其包含的視圖執行的狀態。重啓動活動無法得到服務的地位就重啓

這裏是

  1. 活動開始
  2. 活動創建處理程序中一個全局對象
  3. 活動啓動服務的問題 -
  4. 用戶通過活動命令服務開始發送的過程/接收文件
  5. 的服務現在忙,並且還發送信息經由所述全局對象獲得的處理程序UI
  6. 的活動接收和的handleMessage()和發佈UI上的狀態
  7. 用戶現在將我的活動背景(可能是他開始使用其他應用程序)
  8. 在這個過程中的Android可能殺死我的活動,但是服務正忙/在平均時間運行
  9. 服務完成
  10. 一段時間之後,用戶打開該活動,
  11. (問題)活動開始的onCreate被稱爲活性不知道服務的最後狀態。是否成功完成或失敗或任何其他狀態的最後狀態。

回答

0

SharedPreferences,SQLite的,文本文件或應用程序實例只是靜態變量或變量/場(實現應用的單在你的代碼中任何地方的GetInstance)。靜態變量和應用程序實例一旦被android終止,會丟失內存中的狀態。

+0

可以請你讓它多一點清楚了嗎?你的意思是如果Activity被殺了一個靜態變量仍然存在?並重新啓動,我可以從那裏獲得價值? – Ahmed

+0

活動是應用程序(種類)的一部分。所以,當進程處於活動狀態時,靜態變量可用。當進程處於活動狀態時,應用程序仍然存在,因此您可以重新定義應用程序的類名以擁有自己的類?擴展Application'來使用單例訪問靜態或字段。 –

+0

不錯,如何在服務類中創建一個靜態var來存儲最後的狀態,是不是一樣? – Ahmed

2

這取決於您開始服務的方式,應該如何繼續。

假設簡單的情況下,服務運行在相同的進程和模式START_STICKY,服務將保留在內存中,直到您從活動調用stopService()

在這種情況下,你可以創建一個存儲服務目前的狀態(即沒有啓動,運行,錯誤,成品等)一類級別靜態變量,並從你的活動進行測試。

問候。

+0

在服務類中的靜態無功? – Ahmed

+0

是的,它工作正常。我正在使用它來控制我的應用中的服務狀態。 – Luis

+0

感謝+ 1你,我已經接受了上述的答案... – Ahmed