Если вы можете переименовать файлы под Android, то вы можете записать объект во временный файл "feedobject.t"
, а затем переименовать его в "feedobject"
, который должен быть атомарным.
private static final String sFileName = "feedobject";
private static final String tempFileName = "feedobject.t";
...
File tempFile = new File(tempFileName);
... // write the file
tempFile.renameTo(new File(sFileName));
Если это не такне работать, то вы будете вынуждены иметь синхронизированную блокировку.Потребитель должен заблокировать и ждать, пока производитель закончит писать.Производителю необходимо заблокировать, чтобы убедиться, что он пишет только тогда, когда потребитель не читает.
Вы можете просто синхронизировать методы saveItem
и loadItem
, что блокирует класс:
public static synchronized FeedItem loadItem(Context context) {
...
public static synchronized void saveItem(Context context, FeedItem item) {
...
Лучше было бы создать объект блокировки и заблокировать его:
private static final Object itemLock = new Object();
Затем в методах loadItem
и saveItem
вы бы заблокировали этот объект:
public static FeedItem loadItem(Context context) {
synchronized (itemLock) {
// do the reading...
}
Надеюсь, это поможет.