2016-09-14 37 views
1

在活動A中,我從A1和A2獲得了兩個片段,用戶可以訪問活動B和活動C.我的問題是,活動B和C都需要位置信息(如Lat,lng)。如何在正常的UI繪製中沒有巨大滯後的情況下實現這一點?Android讓每個活動都獲取位置信息?

我有2個不成功的計劃:

  1. 直接使用A點位置,值傳遞給A1和A2,並最終傳遞給B和C.如果用戶是在室內,位置信息,將採取同時接收。如果用戶在沒有位置信息的情況下訪問B和C會怎樣?

  2. 使用服務。但是,我不需要長時間的位置識別,甚至服務可以向所有人發送廣播,B和C可以在他們的onCreate()之前接收廣播消息嗎?另外,廣播需要一段時間才能收到,這會顯着影響初始化。

回答

1

嘿,你有很多選擇實際上

  • 在它創建GoogleApiClient綁定的服務。將此服務綁定到您需要的活動並在其中接收數據。
  • 使用事件總線。使用GoogleApiClient創建類獲取位置,然後僅捕獲需要的活動/片段中的數據
  • 使用Dagger2將GoogleApiClient @module注入到您需要的活動/片段。

希望我幫你;)

+0

這非常有幫助!非常感謝!我還有一個問題,在這三個選項中,哪一個最快?因爲我需要根據它來繪製UI。 – LunarS

+0

我更喜歡使用服務。因爲事件不穩定,我的意思是任何帶有接收器的類都可以獲取數據,所以你不能確定你收到了它的位置。服務非常簡單:無需額外的庫,即使在應用程序被隱藏等情況下也可以運行它,所以我建議您使用它。希望它的幫助) –

+0

@ LunarS https://gist.github.com/bryanl/4337357看看例子 –

0

考慮這個事件總線模式的實現。你應該考慮的唯一事情就是傳遞一個UI線程執行者。

http://square.github.io/otto/

+0

這是非常類似的廣播,它比廣播接收器更快?廣播接收器可能需要很長時間才能收到消息。 – LunarS

+0

另外,, onCreate後可以不活動接收發布事件嗎? – LunarS

+0

該庫使用反射來直接調用您的訂閱方法,所以它會更快,因爲廣播是由Android操作系統處理的,這就是爲什麼它們顯得很慢。有一個特殊的@Provide註釋用於通知新訂閱的組件。 –