在備份操作期間,Android的備份管理器(BackupManager對象)會查詢應用程序要備份的數據,然後會把查詢到的數據交給一個備份傳輸器,讓它把數據發送給雲端的存儲器。在恢復操作期間,備份管理器從備份傳輸器中獲取備份數據,並把它返回給應用程序,以便應用程序能夠把數據恢復給設備。由應用程序來要求數據恢復操作是可能的,但這不是必須的,因爲在應用程序被按照並有跟這個用戶相關聯的備份數據存在時,Android會自動的執行一個恢復操作。恢復備份數據的主要場景是在用戶重置了設備設置,或者升級到了一個新設備,並重新安裝了之前安裝的應用程序的時候。
注意:備份服務不是爲同步應用的數據而設計的,因此不能按需求讀寫備份數據,並且也不能通過備份管理器提供的API以外的方法來訪問備份數據。
備份傳輸器是Android備份框架的一個客戶端組件,它可以由設備製造商或服務提供者來定製。備份傳輸器可能會因設備而有所不同,並且任何設備上的備份傳輸器對應用程序是透明的。備份管理器的API把應用程序與給定設備上的實際備份傳輸器進行了隔離,也就是說應用程序通過一組固定的API與備份管理器進行通信,而不管底層的數據傳輸。
數據備份組件並不保證在所有的Android設備上都是可用的。然而,即使一個設備沒有提供備份傳輸器,那麼應用也不會受到不利的影響。如果確定用戶會從應用程序的數據備份中獲益,那麼可以根據本文檔的描述來實現它,然後發佈與實際由哪些設備來執行備份操作無關的應用程序。這樣應用程序在沒有提供備份傳輸功能的設備上運行時,應用程序也能正常操作,但不接受來自備份管理器的備份數據的回調。
備份數據不能被設備上的其他應用程序所讀取,只有備份管理器和備份傳輸器在備份操作期間能夠訪問要備份的數據。
警告:因爲雲端存儲與傳輸服務會因設備而有所差異,Android並不保證備份數據的安全行,因此在備份敏感數據時要始終保持警惕,如用戶名和口令數據。
基礎
如果要備份應用程序數據,就要實現一個備份代理。備份管理器調用備份代理來提供要備份的數據。應用程序重新安裝時,也會調用這個代理來恢復數據。備份管理器會處理所有與雲端存儲有關的數據事務(使用備份傳輸器來處理),數據備份代理會處理所有的與本地設備相關的數據事務。
以下是實現備份代理的必須步驟:
1. 在清單文件中用android:backupAgent屬性來聲明備份代理;
2. 給應用程序註冊備份服務,Google提供了Android Backup Service(https://developers.google.com/android/backup/?hl=zh-CN)來作爲大多數的Android設備的備份服務。爲了讓這個服務工作,它要求把應用程序註冊到這個服務中。爲了把數據保存到服務器上,可能還要註冊一些其他的可用的備份服務。
3. 通過以下方式之一來定義備份代理:
A. 繼承BackupAgent類
backupAgent類提供了應用程序跟備份管理通信的核心接口。如果直接繼承這個類,必須重寫onBackup()和onRestore()方法,以便處理 備份和恢復數據的操作。
B. 繼承BackupAgentHelper類
BackupAgentHelper類圍繞BackupAgent類提供了方便的封裝,它只需要編寫很少的代碼。在BackupAgentHelper的擴展類中,必須使用一個或多個helper對象,它能夠自動的備份和恢復某種類型的數據,因此不需要自己來實現onBackup()和onRestore()方法。
Android當前提供了備份和恢復SharedPreferences和內部存儲文件的備份helper。