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