1

我在我的应用程序中使用 Android AutoBackup 功能。这些是我的清单设置。

<application
    android:allowBackup="true"
    android:backupAgent=".BackupAgentCustom"
    android:fullBackupContent="@xml/backup_rules"
    android:fullBackupOnly="true"

从我的清单设置中可以看出,我实现了一个自定义 BackupAgent。当onFullBackup被调用时,我尝试在 sharedPreferences 中保存系统时间,所以我知道上次备份发生的时间。请参阅我的 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 备份设置启动备份过程,一切都会按预期工作。意味着,我可以从 sharedPreferences 中获得正确的 LastBackupTime。

但在我的物理设备上,它不起作用。我在我的物理设备上安装了带有释放密钥的应用程序,等到第二天备份过程从系统开始。android系统设置里的备份时间,和shared preferences里的值不一样。似乎 sharedPreferences 中的值没有更新。

安卓系统设置截图

我的问题。如何获取我的应用程序的最后备份时间?

4

2 回答 2

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()性能更好,速度更快。

于 2021-04-22T17:03:39.737 回答
1

commit()不使用apply()。异步将写入应用到磁盘。提交是立即的。您需要立即将其写入。如果您的应用程序的另一部分需要数据,则 apply 就足够了,因为它首先将数据写入内存共享首选项。但是备份是由一个单独的应用程序完成的,因此它无法访问内存中的数据。

于 2021-04-20T16:23:01.560 回答