2017-02-08 23 views
0

我正在測試需要每天午夜發生Firebase數據庫寫入的功能。現在有可能在這個特定的時間,客戶端應用程序可能沒有連接到互聯網。在服務中需要Firebase數據庫行爲說明

我一直在使用Firebase,因爲這可能會導致我的另一個功能中的陳舊數據問題。

從我的觀察來看,如果我在寫入之前斷開應用程序並將其保持這種方式一分鐘左右,Firebase會在重新打開連接並執行寫入操作時最終重新連接。

我的主要問題是:

  • 將這種行爲是即使連接丟失了好幾個小時的一致?

  • Firebase超時?

由於它在永久運行的服務中,它是否仍然需要持久性來確保寫入不會丟失? (假定服務不重新啓動)。

如果服務確實重新啓動,寫入操作是否會丟失?

回答

1

我對這個確切的案例有一些經驗,實際上我不建議使用後臺服務來管理您的Firebase請求。實際上,我不建議管理Firebase請求(稍後解釋)。儘管我們可以讓它們永遠運行,但服務往往會被系統殺死很多(除非你將它們的CPU優先級設置爲更高的級別,但即使系統仍然可能會殺死它們)。

如果您調用任何類型的Firebase Write調用,並且您的服務被終止,則寫入將會如您所說的那樣丟失。除非您創建了一個複雜的管理器,將未提交的請求存儲到您的內部存儲中,並在每次重新啓動服務時加載它們 - 但這是一項非常骯髒的工作,因爲Firebase開發人員照顧我們,並作出.setPersistenceEnabled(true) :)

我知道,你提到你不想使用它,但我強烈建議你這樣做。它像魅力一樣工作,不需要任何服務,並且您不必擔心管理您的寫入請求。也許最好是解決你有的其他問題,以使其成爲可能。

綜上所述,這裏就是我想你的情況做:

  1. 我會叫在開始.setPersistenceEnabled(true)某處(擴展Application類和onCreate()調用建議)
  2. 我會使用Android的AlarmManager並註冊BroadcastReceiver以在午夜接收鬧鐘(重複與否 - 您決定)
  3. 在BroadcastReceiver內部,我只需調用Firebase的寫入功能,並且不用擔心任何事情:)

爲了確保我涵蓋所有的疑問:

  1. 將這種行爲是一致的....

號案例情景:深夜時段,您的服務已成功接到來電,現在正試圖寫入Firebase。例如,如果用戶在上午6點之前沒有連接(僅僅是一種情況),那麼系統在這6個小時內就會殺死它的可能性很高,並且您的寫入將會丟失。飛行時間,或停留在沒有互聯網覆蓋的地區 - 無論是可以打破你的應用程序的一致性的危險情況的示例

  • 威爾火力地堡超時?

  • 它肯定可以,如上所述。我不會冒險並製作一個80-90%的工作應用程序。使用持久性和有100%的工作程序:)

    我相信我的覆蓋剩餘的問題..

    祝你好運!

    +0

    謝謝...我會檢查出來....希望我可以處理其他問題,然後哈哈:)我其實是想實現你所說的複雜系統哈哈:'D – Kushan

    +0

    我也有在我腦海中的這個問題以及你解釋的方式是值得讚揚的。謝謝。 – Deepesh