Android的Data Backup guide表示读取和写入内部存储是“非线程安全”,因此我需要在访问文件时使用Synchronized语句。到目前为止,我对文件输入/输出的工作很少,但我的理解是Synchronized
使用静态对象来确保程序的多个部分不会同时尝试编辑文件。
我不清楚的是我需要使用此声明。例如,我按照指南中的说明在onBackup
和onRestore
方法中使用它:
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
ParcelFileDescriptor newState) throws IOException {
synchronized (DBAdapter.dbBackupLockObject) {
super.onBackup(oldState, data, newState);
}
}
我的问题是,在我的代码中读/写db时,我是否需要做同样的事情?我的直觉是肯定的,但我想在我将这个陈述添加到我访问我的数据库的百万个地方之前确认。
我应该像这样更改一个片段
db.open();
Semester curSemester = db.getSemester(curSemesterId);
db.close();
到
synchronized (DBAdapter.dbBackupLockObject) {
db.open();
Semester curSemester = db.getSemester(curSemesterId);
db.close();
}
?那是我应该做的吗?每个打开/关闭都有一个同步声明?