андроид при возвращении к активности разрушается и не возобновляется - PullRequest
5 голосов
/ 11 августа 2011

Я создаю приложение для Android с двумя действиями, использующими панель действий (https://github.com/johannilsson/android-actionbar, так как я нацеливаюсь на Android 2.2).

У него есть ряд действий.Существует «Домашняя» активность, которая называется Feed, и другая активность, которая называется «Настройки».

Проблема, с которой я столкнулся, заключается в том, что при использовании функции createIntent, приведенной в примере для панели действий, которую я использую, действие все равно будет уничтожено, а не возобновлено, когда пользователь нажимает кнопку «Домой», чтобы вернуться кЛента активности.

После небольшой отладки я обнаружил, что она разрушается не тогда, когда действие сначала приостанавливается и останавливается, а когда происходит запрос на его возобновление.

public static Intent createIntent(Context context) 
{        
    Intent i = new Intent(context, Feed.class);        
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
    return i;    
}

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

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

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

Вы хотите использовать:

FLAG_ACTIVITY_REORDER_TO_FRONT

Цитата из Android Документы :

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

Например, рассмотрим задачу, состоящую из четырех действий: A, B, C, D. ЕслиD вызывает startActivity () с намерением, которое разрешается к компоненту действия B, затем B переводится в начало стека истории с таким результирующим порядком: A, C, D, B. Этот флаг будет игнорироваться, если FLAG_ACTIVITY_CLEAR_TOPтакже указывается.

public static Intent createIntent(Context context) 
{        
    Intent i = new Intent(context, Feed.class);        
    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);        
    return i;    
}
1 голос
/ 11 августа 2011

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

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

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

При отладке вы смотрите на номера "id" для ваших объектов класса? Установите точку останова в методах onCreate() и onDestroy() вашего класса и посмотрите на идентификатор класса внутри каждого из них. Если они разные, то вы знаете, что у вас есть два разных случая вашей деятельности.

Как примечание / вопрос, как вы "нацеливаетесь" на 2.2, если ActionBar не был доступен до 3.0?

...