Автоматическое резервное копирование Android - получить время последнего резервного копирования
Я использую в своем приложении функцию Android AutoBackup. Это мои настройки манифеста.
<application
android:allowBackup="true"
android:backupAgent=".BackupAgentCustom"
android:fullBackupContent="@xml/backup_rules"
android:fullBackupOnly="true"
Я реализовал собственный агент BackupAgent, как вы можете видеть из настроек моего манифеста. Я пытаюсь сэкономить системное время в sharedPreferences, когда вызывается onFullBackup , поэтому я знаю, когда произошло последнее резервное копирование. См. Этот фрагмент кода из моего агента BackupAgent.
@Override
public void onFullBackup(FullBackupDataOutput data) throws IOException {
Log.d(TAG, "onFullBackup !!");
mSharedPreferences.edit().putLong(PREF_KEY_LAST_BACKUP_TIME, System.currentTimeMillis()).apply();
super.onFullBackup(data);
}
Если я запускаю процесс резервного копирования из командной строки или из настроек резервного копирования Android на устройстве, все работает должным образом. Значит, я могу получить правильный LastBackupTime из sharedPreferences.
Но на моем физическом устройстве он не работает. Я установил приложение с ключом разблокировки на свое физическое устройство и дождался следующего дня, когда в системе начнется процесс резервного копирования. Время резервного копирования в системных настройках Android и значение в общих настройках не совпадают. Похоже, что значение sharedPreferences не обновляется.
Мой вопрос. Как я могу узнать время последней резервной копии моего приложения?
3 ответа
Вы исключили свой
"sharedpref"
в твоей
backup_rules.xml
?:
<full-backup-content>
<exclude
domain="sharedpref"
path="com.yourapp.backup.PREF_KEY_LAST_BACKUP_TIME.xml
</full-backup-content>
Если не исключить, обновлять не буду. Нашла одно видео , их немного, наверное, вам поможет.
Примечание: Если вы нашли еще одну информативную статью для принятия решения здесь .
PS:
apply()
лучше для производительности и быстрее.
Использовать
commit()
нет
apply()
. Применять запись на диск асинхронно. Фиксация выполняется немедленно. Вам нужно, чтобы это было написано немедленно. Если данные нужны другому разделу вашего приложения, будет достаточно применить apply, потому что он сначала записывает данные в общие настройки в памяти. Но резервное копирование выполняется отдельным приложением, поэтому у него не будет доступа к данным в памяти.
//get the time of the last backup
SharedPreferences sharedPref = context.getSharedPreferences(
"PrefsFile", Context.MODE_PRIVATE);
long time = System.currentTimeMillis();
long lastBackup = sharedPref.getLong("BackupTime", 0);
//if there was no previous backup, lastBackup will be 0
if (lastBackup != 0){
long timeDiff = time - lastBackup; //difference will be in milliseconds
//do what you need with the time difference
}
//code for backup
SharedPreferences.Editor editor = sharedPref.edit();
editor.putLong("BackupTime", time); //update last backup time
editor.commit();