2012-10-18 47 views

回答

8

是否可以在「服務」中獲得一個對象「FragmentManager」?

不,對不起。

是否可以從「服務」中的「活動」傳遞對象「FragmentManager」。

這將是一個非常糟糕的主意。

如果您希望爲您的服務更新您的用戶界面,請記住可能沒有UI。歡迎用戶按下BACK或HOME按鈕退出您的用戶界面,即使您的服務正在運行。

還要記住,它可能是一個不同的UI。例如,當用戶將設備從縱向旋轉到橫向時,您的活動(和片段,默認情況下)將被銷燬並重新創建。或者,用戶可以利用一些可以將不同活動帶到前臺的東西,並且該活動具有自己的片段和管理器。

因此,有你的服務更新你的UI,你需要使用支持這種分離操作的通信路徑,如:

  • 發送廣播
  • 發送使用LocalBroadcastManager
  • 廣播經由 ContentProvider
  • 更新內容,使用CursorLoaderContentObserver活動被通知關於數據改變
+0

也就是說,即使我能夠將FragmentManager轉移到servise。當用戶旋轉設備時,它(FragmentManager)將變得無效(對於從中獲得它的活動)?對? – Aleksandr

+0

@ K.G.V .:「當用戶旋轉設備時,它(分段管理器)將變爲無效(對於從中獲取它的活動)?」 - 可能。我沒有看過底層的實現,看看管理器本身是否保留在配置更改中。不同的活動(例如活動A與活動B)肯定有不同的FragmentManager實例。 – CommonsWare

+0

嘗試使用LocalBroadcastManager。但是一個新問題:如果我的Activity沒有激活,那麼它可以從緩存中刪除。然後它將停止接收消息。是否可以設置一個標誌,以便Activity不會從緩存中移除? – Aleksandr

相關問題