Intereting Posts
Длинные математические вычисления в приложении для Android Получение тяжелых данных бросает окно курсора: окно является полной ошибкой Передавать данные ArrayList в веб-службу SOAP в android Как получить подробную информацию о стороннем приложении в Android? Отличительные особенности режима разработки и режима среды выпуска на Android Как определить макет в PopupWindow из XML-файла, когда метод PopupWindow вызывается из отдельного класса Реализация событий Spinner with Butter Knife Как узнать папку с камерами на телефоне Android? Панель действий Android: нажмите программную кнопку «Вверх» Java.lang.ClassCastException: org.json.simple.JSONArray нельзя передать в org.json.JSONArray Android: избегайте разрыва строки в частях TextView String Android-фрагменты скрывают шоу OnHide / OnShow? JSfiddle: как создать проект multi-JS / CSS / HTML-файлов? Кнопки должны быть такими же широкими, как и самые большие Как обнаружить смайлики в EditText в android

Android – общие настройки иногда теряются

Некоторые пользователи моего приложения жалуются, что иногда (случайным образом) настройки моего приложения возвращаются к состоянию по умолчанию (обычно после перезагрузки телефона). Однако я никогда не смог воспроизвести проблему. Я думаю, что это связано с тем, что во многих местах моего приложения у меня есть фрагмент кода, который вызывает редактор общих настроек и фиксирует изменения. Может ли он разрешить повреждение файла общих предпочтений, если я попытаюсь совершить несколько изменений в Тот же файл предпочтений в одно и то же время? (Многопоточное приложение)

Я действительно потерян. Я пытался найти в Интернете часами, чтобы найти решение без успеха.

Если у кого-то есть даже идея, чтобы я мог начать расследование, я был бы благодарен.

Спасибо, Амит Моран

Я бы ответил на другие ответы – вам нужно избегать конфликтов, если вы не хотите испортить файл, – и я пошел дальше, чтобы предположить, что вы, вероятно, неправильно используете SharedPreferences.

SP предназначены для хранения небольших фрагментов информации о ваших приложениях – таких пользовательских настройках, как громкость, музыка или что-то в этом роде.

SP не предназначены для хранения данных, которые часто меняются и / или больших объемов данных, и это плохая идея, чтобы попытаться это сделать (по причинам, которые вы обнаружили, и нескольким другим).

Помните, что SP – это просто XML-файл – вы несете накладные расходы на разбор и повторное создание, каждый раз, когда вы меняете его тоже!

Идея приложения, которое обновляет SP в более чем одном потоке, немного сумасшедшая, я думаю – вам нужен лучший способ управления и хранения данных, которые вы сохраняете, – это будет окупаться для вас более чем одним способом. ,

Согласно документации SharedPreferences.Editor :

Обратите внимание, что, когда два редактора изменяют предпочтения в одно и то же время, последний, кто вызывается, совершает выигрыши.

Исходя из этого, я понимаю, что множественные одновременные фиксации не уничтожат ваши настройки, но возможно, что не все изменения, которые вы пытаетесь написать, в конечном итоге будут записаны, если одновременно используются несколько экземпляров Editor . Чтобы этого избежать, вы можете поместить все модификации предпочтений в синхронизированные блоки или даже использовать один синхронизированный статический метод для всех записей предпочтений.

Я предлагаю вам использовать singleton для управления настройками. Независимо от того, выполняете ли вы это, реализуя настоящий сингл java , или используя контекст приложения Android, зависит от вас. (См. Этот вопрос для нескольких хороших аргументов для / против каждого)

Для чего-то вроде SharedPreferences это хороший способ управлять ими, особенно для многопоточного приложения. Это, возможно, устранит некоторые вопросы о том, противоречат ли конфликты друг другу. Это может быть не вся проблема, но это где-то начать.

У меня была аналогичная проблема: мои предпочтения не были надежно сохранены. На некоторых устройствах (в моем случае XOOM-Tablet) данные иногда теряются, а иногда нет. Я решил проблему, просто вызывая clear () в редакторе, прежде чем передавать новые данные.

Общие настройки теряются после отключения устройства или убийства приложения

Я обнаружил, что теряю определенную запись в SharedPreferences , открывая редактор, делая на нем getString , а затем committing без putString , даже если не было требуемого изменения. Как только я putString в putString чтобы сохранить значение, несмотря ни на что, запись прекратилась после commit .