這篇要講Android自己的backup service,
其實使用起來蠻簡單的,
主要分成下面4個步驟,
1. Register for Android Backup Service
首先要先去註冊一個API Key,先到這個網站,
進去以後輸入你的package name,接著就會給你一組API key.
這樣就註冊完成.
2. Configuration
完成上面的註冊以後,接著要對你的project做configuration,
先開啟你的AndroidManifest.xml,
先在application element加上一個android:backupAgent這個attribute,
這個attribute的名字,就是待會你新增的class名稱,
接著在application之中,加入下段的meta data,
記得把xxxxxxxxxx換成你剛剛註冊的API Key,
3. Backup internal database
接著新增一個Class,這個Class要繼承BackupAgentHelper,
記得這Class名稱要跟你manifest.xml中的一樣!
這裡要題外話一下,其實你也可以繼承BackupAgent,
當你如果需要做到更複雜的backup時,
例如你不想backup整份file,你只想backup某個"部分"的data,
這時候你只能透過BackupAgent去做到,
而BackupAgentHelper其實也只是BackupAgent的一個wrapper,
讓你更輕易的backup和restore罷了.
回到主題,先新增一個class繼承BackupAgentHelper,內容如下,
在onCreate裡面用到了FileBackupHelper,
最原始的FileBackupHelper是真的用來backup某個file,
但因為我們這裡要backup db,
所以我們要override掉getFilesDir,
在getFilesDir中去拿db的路徑,
然後透過FileBackupHelper去做backup!
只要透過下面的code就可以幫你自動backup和restore了!
雖然說backup和restore都是自動的,
那麼要怎麼主動的去request backup?
那就要用BackupManager了,
透過dataChanged,會去幫你queue這個backup的job,
為什麼是說queue呢?因為backup不會馬上執行的!
都是批次的執行!
4. Test
上面說到了Backup都是批次執行,不是即時的,那我該怎測試呢?
要透過adb了,
打開以後應該會發現你的資料都還在!
其實使用起來蠻簡單的,
主要分成下面4個步驟,
1. Register for Android Backup Service
首先要先去註冊一個API Key,先到這個網站,
進去以後輸入你的package name,接著就會給你一組API key.
這樣就註冊完成.
2. Configuration
完成上面的註冊以後,接著要對你的project做configuration,
先開啟你的AndroidManifest.xml,
先在application element加上一個android:backupAgent這個attribute,
這個attribute的名字,就是待會你新增的class名稱,
<application android:label="MyApp"
android:backupAgent="ExpenseBackupAgent">
接著在application之中,加入下段的meta data,
記得把xxxxxxxxxx換成你剛剛註冊的API Key,
<meta-data android:name="com.google.android.backup.api_key"
android:value="xxxxxxxxxxxxxxxxxxx" />
3. Backup internal database
接著新增一個Class,這個Class要繼承BackupAgentHelper,
記得這Class名稱要跟你manifest.xml中的一樣!
這裡要題外話一下,其實你也可以繼承BackupAgent,
當你如果需要做到更複雜的backup時,
例如你不想backup整份file,你只想backup某個"部分"的data,
這時候你只能透過BackupAgent去做到,
而BackupAgentHelper其實也只是BackupAgent的一個wrapper,
讓你更輕易的backup和restore罷了.
回到主題,先新增一個class繼承BackupAgentHelper,內容如下,
在onCreate裡面用到了FileBackupHelper,
最原始的FileBackupHelper是真的用來backup某個file,
但因為我們這裡要backup db,
所以我們要override掉getFilesDir,
在getFilesDir中去拿db的路徑,
然後透過FileBackupHelper去做backup!
只要透過下面的code就可以幫你自動backup和restore了!
public class ExpenseBackupAgent extends BackupAgentHelper {
private static final String DB_NAME = "expense"; // db名稱
private static final String TAG = ExpenseBackupAgent.class
.getCanonicalName();
@Override
public void onCreate() {
Log.e(TAG, "backu db");
FileBackupHelper dbs = new FileBackupHelper(this, DB_NAME);
addHelper("dbs", dbs);
}
@Override
public File getFilesDir() {
final File f = getDatabasePath(DB_NAME);
return f.getParentFile();
}
}
雖然說backup和restore都是自動的,
那麼要怎麼主動的去request backup?
那就要用BackupManager了,
透過dataChanged,會去幫你queue這個backup的job,
為什麼是說queue呢?因為backup不會馬上執行的!
都是批次的執行!
BackupManager bm = new BackupManager(this);
bm.dataChanged();
4. Test
上面說到了Backup都是批次執行,不是即時的,那我該怎測試呢?
要透過adb了,
adb shell bmgr backup packagename # 等於dataChanged最後再安裝一次你的app,
adb shell bmgr run # 立即去trigger backup job
adb uninstall packagename # 先刪掉app
打開以後應該會發現你的資料都還在!