Android сильная ссылка - PullRequest
       10

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

6 голосов
/ 15 января 2010

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

как я знаю, есть несколько ключевых слов, таких как

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

Ответы [ 3 ]

3 голосов
/ 15 января 2010

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

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

1 голос
/ 15 января 2010

Если я не ошибаюсь, когда приложение остается открытым в течение длительного времени, данные ОС выпускаются ОС Android, и во время остановки активности он вызовет «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 голос
/ 15 января 2010

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

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

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

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

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