Android - хранение ссылок на ApplicationContext - PullRequest
5 голосов
/ 20 апреля 2010

У меня есть статический класс Preferences, который содержит некоторые настройки приложения и тому подобное. Можно ли хранить там ссылку на ApplicationContext? Мне нужна эта ссылка, чтобы я мог получить папку кэша и тому подобное в классах, которые не наследуют Activity.

1 Ответ

6 голосов
/ 20 апреля 2010

Вы правильно используете ApplicationContext, поскольку, если вы не , это может привести к значительным утечкам памяти .

Однако проблема в том, что переменная static может не сохранить свое значение. Благодаря тому, что Android обрабатывает приложения, возможно, что ваше приложение может быть убито и затем перезапущено - обычно из-за переключения пользователя на другие приложения - таким образом, что ваша переменная static станет нулевой, а ваш код, который ее устанавливает не будет работать Посмотрите на этот вопрос для более подробного ответа .

Может быть возможно обойти эту проблему, но тестирование всех возможностей, которые могут привести к тому, что ваша переменная в конечном итоге null будет занимать много времени и подвержено ошибкам. Поэтому в моих классах статических предпочтений я сделал любой из методов, которые требуют, чтобы Context принимал его в качестве аргумента. Например:

static int getSomeIntegerPreference(Context context) {
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0);   
}

Это некрасиво, но работает.

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