используя статические переменные в Android - PullRequest
1 голос
/ 29 декабря 2010

В моей основной деятельности я объявляю статический список следующим образом:

public static List<Map<String, String>> ArrList = new ArrayList<Map<String, String>>();

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

Итак, вот мои вопросы: 1) Насколько я знаю, из-за нехватки памяти или чего-то еще моя mainActivity может быть уничтожена (в то время как другое действие находится в фокусе), и в этом случае мой ArrList также будет уничтожен. Это правильно? 2) Когда я выхожу, затем перезагружаюсь, мое приложение падает, и отладчик сообщает OutOfMemory. Я предполагаю, что после перезагрузки Android выделяет другой блок памяти для моего статического списка. Итак, я также предполагаю, что я должен уничтожить статический список, когда активность завершится. Как это сделать правильно?

Я ценю любые другие советы по этому вопросу.

Ответы [ 2 ]

1 голос
/ 29 декабря 2010
  1. Вы можете использовать статические переменные - никаких ограничений на это нет (кроме крайне нежелательно хранить в статических переменных объекты Activity / Context).Также некоторые люди не любят использовать статические, говоря, что это не очень «стильно»

  2. Если вы собираетесь уничтожить статический список после уничтожения Activity - это означает, что вам не нужен статический список,да?Статические переменные полезны, когда вам нужно что-то общее для всех экземпляров данного класса.

  3. Лучшее место для хранения глобальных переменных - это расширение класса приложения, объявляющего закрытые члены, доступные через методы получения / установки, например:

    public class MyApp extends Application
    {
        private List<Map<String, String>> ArrList;
    //...
    }
    

    В этом случае вам нужно объявить MyApp в манифесте Android ( смотрите здесь )

0 голосов
/ 29 декабря 2010
  1. ваш статический ArrayList будет очищен от его значений, когда ваш процесс убит (в результате получается пустой список, но все еще действительный и не нулевой). вам нужно будет перезагрузить список после того, как вы возобновите свое убийство

  2. этот статический массив может сохранять свои значения даже после того, как вы "выйдете" из своего приложения (но не после того, как его процесс завершен), поэтому убедитесь, что вы очистили массив перед тем, как выйти, чтобы он не был снова заполнен двойной + значения). ArrList.clear();

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

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