влияет ли контекст, переданный на getDefaultSharedPreferences, на результат? - PullRequest
0 голосов
/ 11 декабря 2018

Я получаю странную ошибку, поэтому пытаюсь исключить возможности.

Изменяет ли контекст, переданный на PreferenceManager.getDefaultSharedPreferences(), результат?

Я имею в виду, когда я 'Записывая настройки в мое приложение, я никогда не обращаю внимания на то, какой контекст я передаю этому методу, поскольку он является допустимым контекстом ...

Иногда я ставлю Activity, иногда Appliaction независимо от того, какой у меня контекстна руках

Это неправильно?Я заметил, что в какой-то момент я получаю неправильные значения предпочтений, и я не знаю, есть ли ошибка в моем коде или это

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Неважно, указали ли вы Application или Activity в качестве параметра Context для PreferenceManager.getDefaultSharedPreferences().

Если вы посмотрите на источник для getDefaultSharedPreferences():

return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
        getDefaultSharedPreferencesMode());

Заглядывая дальше, в getDefaultSharedPreferencesName(context):

return context.getPackageName() + "_preferences";

Это означает, что для любого Context вашего приложения, вы получите тот же SharedPreferences обратно, так как идентификатор вашего приложения не изменяется в зависимости от Activity или Application.

Единственный раз, когда вы можете столкнуться с потенциальной проблемой, это если вы вручную создаете Context для другого пакета (например, используя Context.createPackageContext()).

0 голосов
/ 11 декабря 2018

SharedPreferences хранилища данных имеют имя , и, если вы используете одно и то же имя, вы всегда получите одно и то же хранилище данных.

Подсказка для @kcoppock whoуказал, что в конкретном случае PreferenceManager.getDefaultSharedPreferences() единственное, от чего зависит сгенерированное имя, - это пакет Context.Поскольку любой экземпляр Application или Activity, который вы передаете, с большой вероятностью будет иметь одно и то же имя пакета, в вашем случае вы всегда должны получать одно и то же хранилище данных.

Существуют другие способы получения хранилищ SharedPreferences, хоть.Activity.getPreferences() сгенерирует имя на основе имени класса действия, так что вызов getPreferences() из двух разных действий даст вам два разных хранилища данных.

Вы также можете вызвать Context.getSharedPreferences() напрямую (оба PreferenceManager иАктивность просто вызовите это) и передайте имя хранилища данных явно.Там нет требования о том, как имя должно выглядеть;если вы используете одно и то же имя, вы всегда получите одно и то же хранилище данных.

https://developer.android.com/reference/android/content/Context#getSharedPreferences(java.lang.String,%20int)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...