Большие общедоступные статические переменные в Android - PullRequest
1 голос
/ 05 января 2012

Эй, я делаю приложение для викторины, и мне нужно передать ArrayList до 100 объектов «Вопрос» из одного действия в другое.Объекты Question имеют около 6 параметров - все довольно маленькие строки.Я искал способы сделать это, и один из них упоминал о том, чтобы объявить его как открытую статическую переменную в одном классе, а затем ссылаться на него в другом.Мне было интересно узнать следующее:

  • Нужно ли создавать экземпляр ArrayList, прежде чем я смогу его использовать, или я могу просто объявить переменную?Как в:

    ArrayList<Question> QuestionBank = new ArrayList<Question>();
    

    или

    ArrayList<Question> QuestionBank;
    
  • , если я объявляю эту переменную в одном действии, как она остается доступной, когда я в другомдеятельность?Является ли действие, в котором оно было объявлено, продолженным?

  • это очень трудоемкий метод?Есть ли более эффективный, но относительно прямой путь?
  • если я объявлю переменную null после того, как я закончу ее использовать, она освободит все пространство, которое ранее использовалось, верно?

Ответы [ 2 ]

4 голосов
/ 05 января 2012

Ответы:

  1. Вам нужно создать экземпляр, прежде чем "использовать" if. Под «использованием» я подразумеваю методы вызова. Неважно, где вы его создаете, первое или второе действие.

  2. Статические поля также называются полями классов, потому что они доступны через класс, а не через экземпляр объекта. В результате у статических полей всегда есть только один экземпляр, например, MyClass.someField доступно во всем приложении и есть только одно.

  3. Используется память (RAM), а не данные в файле (используется флеш-память). Но в какой-то момент вам нужно иметь его в памяти, поэтому он использует эту память в любом случае.

  4. Да, если вам нужно только это временно, вы можете установить поле на null после того, как оно вам больше не нужно, и память будет освобождена (в конце концов, когда gc запустится).

Кстати, есть несколько вариантов обмена данными внутри приложения.

  1. Передача данных между действиями через Intent.setExtra() / Intent.getXXXExtra()
  2. Класс со статическими переменными
  3. Через именованный класс Application, который является единичным экземпляром и действует в течение всего жизненного цикла приложения
  4. Общие настройки
  5. База данных
  6. Внутренняя память
0 голосов
/ 06 января 2012

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

Я полагаю, что лучшее решение (как предложено выше) - сделать ваш Questions класс Parcable.Затем установите данные в методе Activity Intent.setExtra.Когда начинается ваша другая деятельность, вы читаете вопросы из Intent, а затем все ваши данные хорошо вписываются в жизненный цикл действий, и ваши действия более пригодны для повторного использования.

...