Статические методы против расширения классов android.app.Application? - PullRequest
4 голосов
/ 28 декабря 2011

У меня есть класс, который расширяет приложение в приложении Android tabHost. В классе App я размещаю методы и переменные, которые в противном случае мне нужно было бы заново создавать в каждом классе. Один метод читает из БД и сохраняет результаты в ArrayList (например, имя, фамилия). Вместо того, чтобы перечитывать эту базу данных и заново создавать код для каждой вкладки, для которой нужна информация, я поместил метод и ArrayList в класс, расширяющий Application (myAppClass). Таким образом, установив mAC = (myAppClass) getApplicationContext() из любого представления вкладок в onCreate (), я могу ссылаться на все методы get .. () и set .. () в myAppClass.

Мой первоначальный план состоял в том, чтобы использовать общий класс со статическими методами и переменными, но я прочитал много потоков "не делай этого", поэтому решил пойти по пути приложения. Теперь я столкнулся с ситуацией, когда я пытаюсь использовать myAppClass в библиотеке проектов, но получаю ошибки о android.app.Application cannot be cast to... Если я изменю myAppClass обратно на статические методы / переменные (и не расширяю приложение), все работает, но это должен быть большим нет-нет. Есть ли другой способ сделать это? Не уверен, что Android передает все по ссылке, но лучше ли мне заново реализовать все приложение, передавая огромные (тысячи объектов / членов) списки ArrayLists назад и вперед между методами / классами?

1 Ответ

6 голосов
/ 28 декабря 2011

Мой первоначальный план состоял в том, чтобы использовать общий класс со статическими методами и переменными, но я прочитал много потоков "не делай этого", поэтому решил пойти по пути приложения.

«Не делай этого», как правило, является рекомендацией против чего-либо в глобальной области видимости и поэтому охватывает статические элементы данных, а также пользовательские Application. Оба являются вероятными источниками утечек памяти.

Теперь я столкнулся с ситуацией, когда я пытаюсь использовать myAppClass в библиотеке проектов, но получаю ошибки об android.app. Приложение не может быть приведено к ...

Возможно, ваш манифест в хостинг-проекте не использует реализацию библиотеки Application.

это должно быть большое нет-нет

Опять же, статические члены данных не хуже пользовательских Application, а во многих случаях лучше.

Есть ли другой способ сделать это?

Не используйте Application или статические элементы данных.

Лучше ли мне заново реализовать все приложение, передавая огромные (тысячи объектов / членов) списки ArrayLists назад и вперед между методами / классами?

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

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