2013-02-24 67 views
15

我想使用Android backup service來備份我的應用程序的數據,但我很關心網絡的使用情況。每個備份操作需要上傳約500KB的數據。不多,但如果備份每天執行10次,則可輕鬆達到5MB。Android備份服務 - 備份的時間和頻率如何?

我的問題是,Android決定執行備份的時間和頻率如何?在我致電dataChanged()後,文件只提到「在未來適當的時候」。它並沒有解釋什麼樣的條件構成了一個「適宜的時間」。

你可以通過調用 dataChanged()隨時要求備份操作。此方法會通知備份管理器您希望 使用您的備份代理備份您的數據。然後,備份管理器 將在適當的時間在 以後調用您的備份代理的方法onBackup()

+0

您是否找到了答案?可能有些日誌記錄可能有助於收集一些統計數據。 – 2014-10-31 20:24:22

+0

@Andree:我有同樣的問題。你有答案嗎?對於mycase。我爲每個備份操作上傳了大約1MB的數據(用戶本地sqlite數據)。 – Loc 2015-01-03 01:24:56

+0

@Loc Ha:對不起,我沒有。我會在這個問題上得到更多的關注。 – Andree 2015-01-03 01:30:45

回答

12

由兩個部分組成,以你的問題:

  1. 多久

讓我們先從#2,多久。我認爲這些文件足以回答這個問題。只要您的應用程序調用dataChanged()方法,就有可能進行備份。因此,謹慎的做法是限制調用這種方法的頻率。這取決於你如何處理這個問題。您可能想要考慮的一種方法是僅針對您的應用中的重要/重要數據更改進行調用。也就是說,不要將其稱爲用戶偏好的改變(如背景色等),而是將其稱爲任何類型的交易數據。

至於#1,:這是很難準確回答。文檔對此不置可否。這使Android可以自由地更改此算法,而不會違反任何開發人員的期望。我認爲這是合理的假設以下內容:備份可能會很快發生,可能在最合適的時間條件是適當的。如果它不「很快」發生,那麼它不會是一個非常有用的服務,會嗎?有可能是Android等待一些簡單的條件(只是猜測,但這可能是可用的線程,可用的網絡連接,沒有其他網絡活動)。請注意,文檔狀態爲「它將使用設備上啓用的任何傳輸進行備份」。這聽起來像是它旨在儘可能早地進行備份。

+0

對於一個廣泛和困難的問題的好答案(因爲文檔沒有說,所以只有谷歌真正知道)。我同意你的觀點。 – shkschneider 2015-01-06 15:08:03

+1

發生的頻率取決於Android的版本,真的。在Android L之前,首次備份通行證將在設備安裝後大約12個小時發生;那麼之後,備份將在任何名爲dataChanged()的應用程序後約1小時內發生。在後來的Android版本中,事情變得更加輕鬆了;它更像是從dataChanged()現在4小時到備份實際運行的時間。這是用於較舊的鍵/值API。全數據備份是Android M中的新功能,僅當設備閒置並連接到無線網絡時纔會運行。 – ctate 2015-12-27 04:43:40

2

我鴿子進一步一直在研究Android的備份管理服務,並發現了以下內容:

  1. 據「請求備份區」中http://developer.android.com/guide/topics/data/backup.html 「如果你調用dataChanged()數次,連續,前備份管理器向您的代理請求備份,您的代理仍然只收到一次對onBackup()的調用。「

我解釋這是因爲我們的應用程序中的每個DataChanged()調用通過傳輸通知備份管理器服務。即使DataChanged在備份管理器服務響應時(需要備份管理器響應頻率時)作出響應之前被調用多次,備份管理器服務也只會對我們應用的備份代理的onBackup()執行一次調用。

  • 根據這個測試(我也跑了備份頻率測試剛纔):https://advancedweb.hu/2014/12/09/practical_measurement_of_the_android_backup_manager/ 備份管理器服務響應每隔一小時(我也證明了這在我的測試)只要在上次數據備份後的至少一小時之間至少調用一次DataChanged()。