2014-04-21 75 views
4

每個Activity都要求onSessionStart(context, apikey);onSessionEnd(context);,這樣可以跟蹤整個活動中的會話。即使是碎片可以做同樣的,但是當一個服務參與(你認爲你會沒有結束,而服務是做的東西),在以下情況下會發生什麼:將Flurry for Android餘額開始/結束會話調用?

  1. 活動在onStart() - >亂舞啓動(活動上下文)
  2. 服務的onCreate - > Service.SomeActionIsHappening() - >亂舞啓動(服務上下文)
  3. 活動的onStop() - >亂舞停止(活動上下文)
  4. 服務仍在運行 - >調用Service.SomeOtherAction() - > Flurry Start(Service Context)
  5. Servic e Ends - > Flurry Stop(服務上下文)。

所以平衡一直(排名不分先後):

  1. 活動開始。
  2. 活動結束。

這很好。活動開始/結束計數被平衡爲0.

  1. 服務開始。
  2. 服務開始。
  3. 服務結束。

現在,您需要撥打結束第四次來平衡呼叫嗎? (請記住,上下文是相同的,服務被稱爲啓動兩次,但它的呼叫結束一次)。

對於Flurry而言,只要來自同一個上下文的最後一次調用是onEndSession,它是否足以(並且有效)接收N個開始和一個(或多個)結束?

Flurry是否保留引用計數(很像可可)或只是一個上下文列表?

我還沒有看到關於這個特定場景的文檔。所有的文件說是這樣的:(重點煤礦)

確保呼叫匹配到onEndSession 爲onStartSession的每次通話,傳遞這是用來調用onStartSession相同的上下文對象。 注意:只要有任何已調用onStartSession而不是onEndSession的Context,會話將繼續。如果一個新的Context在最後一個Context調用onEndSession的10秒內調用onStartSession,那麼會話將被恢復,而不是創建一個新的會話。這可以確保在用戶從應用中的一個活動轉換到另一個活動時,他們不會爲每個活動跟蹤單獨的會話,但會有跨越多個活動的單個會話。

但目前還不清楚,如果同樣情況下呼叫啓動10次會發生什麼...

回答

1

根據我的經驗,是的,它會平衡呼叫。 最近我犯了一個錯誤,將Flurry會話綁定到Accessibility Service OnCreate/OnDestroy並且會話永遠不會結束,導致沒有分析發送(如果用戶啓用了輔助功能服務,它將永遠運行)

3

@ 323go基於什麼馬丁問(並回答他的自我)是不是一個問題的文件是如何完成的,相反,我們應該如何將Flurry用於服務(保持或不保持啓動/停止平衡),到期服務不具有像活動/片段一樣的生命週期。