Сильная ссылка Android

Я сделал, чтобы SearchCritiera возразил, и я делаю его одиночным элементом и объявляю эту переменную как статичную, теперь проблема состоит в том, если я уехал, мое приложение остаются открытыми в течение нескольких часов, что статический объект удален Android ОС, как я могу удостовериться, что статический объект не должен быть удален ОС.

как я знаю, что существует немного ключевых слов как

Weekreference и softreference являются там каким-либо strongreference ключевым словом, которое может сказать Android, что ОС не удаляет ссылку??

6
задан d-man 15 January 2010 в 11:13
поделиться

3 ответа

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

Вы можете просто избежать этого, сохранив их в вашем уникальном экземпляре Application. Этот объект гарантированно проработает столько же, сколько и ваше приложение.

3
ответ дан 17 December 2019 в 04:47
поделиться

Это просто псевдоним: http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88418.aspx

-121--3211283-

Я не думаю, что это возможно, даже если вы решите не использовать OGNL с вашими приложениями struts2. OGNL используется внутри struts2 для переноса данных и преобразования типов. Если вы планируете использовать struts2, вам придется использовать OGNL, и если вы этого не сделаете, struts2 сделает это автоматически.

Хотя вы можете исключить OGNL и использовать чистый EL, но путь вся цель использования struts2 терпит поражение, потому что если вы не используете встроенные функции struts2, вы, вероятно, пишете эти механизмы с нуля, используя EL.

Хотя изначально это может показаться странным, но OGNL достаточно мощный и стоит учитывать при развитии в struts2.

-121--3942036-

К сожалению, вы не можете заставить Android сохранить ваше приложение в памяти. Если ОС считает, что ей требуется больше памяти для приложения основной системы или службы, она оставляет за собой право прервать одно или все Действия.

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

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

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

1
ответ дан 17 December 2019 в 04:47
поделиться

Если я не ошибаюсь, когда приложение остается открытым в течение длительного времени данные освобождаются операционной системой Android OS, и во время остановки деятельности он будет называть "onSaveInstanceState", а когда я могу хранить searchritiera в этот метод и он вернется обратно, когда "onRestoreInstanceState" получит вызов ?

private static SearchCriteria searchCriteria;


@Override 
    public void onSaveInstanceState(Bundle outState) 
    {
        outState.putSerializable(WLConstants.SEARCH_CRITERIA, searchCriteria);
        super.onSaveInstanceState(outState); 
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if(savedInstanceState != null){
            searchCriteria = (SearchCriteria)
            savedInstanceState.getSerializable(WLConstants.SEARCH_CRITERIA);
        }
        super.onRestoreInstanceState(savedInstanceState);
    }
1
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: