Ответ 1
Android будет выполнять синхронизацию, когда это необходимо - например, когда экран выключается, выключение устройства и т.д. Если вы просто смотрите на "нормальную" операцию, явная синхронизация приложения никогда не требуется.
Проблема возникает, когда пользователь вытаскивает батарею из своего устройства (или делает жесткие reset ядра), и вы хотите, чтобы вы не потеряли никаких данных.
Итак, первое, что нужно понять: проблема в том, когда власть внезапно потеряна, поэтому не может быть чистое завершение, и вопрос о том, что произойдет в постоянном хранилище в этот момент.
Если вы просто пишете один независимый новый файл, не имеет значения, что вы делаете. Пользователь мог бы вытащить батарею, пока вы были в середине письма, прямо перед тем, как начать писать, и т.д. Если вы не синхронизируете, это просто означает, что есть какое-то более продолжительное время, когда вы закончите писать, в течение которого вытягивание батареи потеряет данные.
Большая проблема заключается в том, когда вы хотите обновить файл. В этом случае, когда вы читаете следующий файл, вы хотите иметь либо предыдущее содержимое, либо новое содержимое. Вы не хотите получать что-то наполовину написанное или потерять данные.
Это часто делается путем записи данных в новый файл, а затем перехода к этому из старого файла. До ext4 вы знали, что после того, как вы закончили писать файл, дальнейшие действия над другими файлами не будут поступать на диск до тех, которые находятся в этом файле, поэтому вы можете безопасно удалить предыдущий файл или выполнить другие операции, зависящие от вашего нового файла полностью написано.
Однако теперь, если вы пишете новый файл, а затем удалите старый, и батарея вытащится, при следующей загрузке вы увидите, что старый файл удален, а новый файл создан, но содержимое нового файла не полный. Выполняя синхронизацию, вы гарантируете, что новый файл будет полностью написан в этой точке, так что вы можете делать дальнейшие изменения (например, удаление старого файла), которые зависят от этого состояния.