8. Extend BackupAgent
public class ExampleAgent extends BackupAgent {
@Override
public void onBackup(ParcelFileDescriptor oldState,
BackupDataOutput data, ParcelFileDescriptor newState) {
// TODO
}
@Override
public void onRestore(BackupDataInput data, int
appVersionCode, ParcelFileDescriptor newState) {
// TODO
}
}
8
9. Extend BackupAgent
onBackup
ParcelFileDescriptor oldState
read-only last backup state, may be null
contains representation of the data
from the last onBackup's newState
BackupDataOutput data
use to deliver backup data
ParcelFileDescriptor newState
record the final backup state after writing data 9
10. Extend BackupAgent
onRestore
BackupDataInput data
can read backup data
int appVersionCode
Manifest attribute when data was backed up
can cross-check app version
ParcelFileDescriptor newState
write the state of data
10
11. Implement onBackup (1/2)
boolean doBackup = (oldState == null);
synchronized (BackupRestoreActivity.sDataLock) {
RandomAccessFile f = new RandomAccessFile(mFile, "r");
mFilling = f.readInt();
mAddMayo = f.readBoolean();
mAddTomato = f.readBoolean();
}
f.close(); read local file
if (!doBackup) {
is newest
doBackup = compareStateFile(oldState);
} 11
12. Implement onBackup (2/2)
if (doBackup) {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(buf);
out.writeInt(mFilling);
out.writeBoolean(mAddMayo);
out.writeBoolean(mAddTomato); back up
byte[] buffer = buf.toByteArray();
int len = buffer.length;
data.writeEntityHeader(APP_DATA_KEY, len);
data.writeEntityData(buffer, len);
}
writeStateFile(newState); 12
13. Implement onRestore (1/3)
String key = data.getKey();
int size = data.getDataSize();
if (!APP_DATA_KEY.equals(key)) {
data.skipEntityData();
}
data is invalid, skip it
13
14. Implement onRestore (2/3)
if (APP_DATA_KEY.equals(key)) {
byte[] buf = new byte[size];
data.readEntityData(buf, 0, size);
ByteArrayInputStream is = new
ByteArrayInputStream(buf);
DataInputStream in = new DataInputStream(is);
mFilling = in.readInt();
mAddMayo = in.readBoolean();
mAddTomato = in.readBoolean();
data is valid, read it 14
15. Implement onRestore (3/3)
synchronized (BackupRestoreActivity.sDataLock) {
RandomAccessFile f = new RandomAccessFile(mFile, "rw");
f.setLength(0L);
f.writeInt(mFilling);
f.writeBoolean(mAddMayo);
f.writeBoolean(mAddTomato);
f.close();
}
} write data to local file
writeStateFile(newState);
15
17. Extend BackupAgentHelper
public class ExampleAgent extends BackupAgentHelper {
@Override
public void onCreate() {
FileBackupHelper helper = new FileBackupHelper(this,
"file");
addHelper("key", helper);
}
}
can also use
SharedPreferencesBackupHelper
17