2015-04-07 2 views
2

Итак, вот сценарий, в котором я сомневаюсь: У меня есть объект Stack Activity в классе Application, который будет содержать ссылку на все действия, которые в настоящее время проживают в моем Приложение. Вся деятельность вставляется в стек в onCreate() и появляется сама по onDestroy().onDestroy от деятельности, не выполняющейся сразу после Activity.finish()

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MyApplicationClass.stackOfActivity.add(this); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    MyApplicationClass.stackOfActivity.pop(); 
} 

В MyApplicationClass (то есть класс, который расширяет приложение) я создал метод для завершения деятельности, которые находятся на вершине стека.

static public void popActivitiesFromStack(int amountOfActivitiesToBePopedOut){ 
    if(stackOfActivity.size() >= amountOfActivitiesToBePopedOut){ 
     for(int i = 0; i < amountOfActivitiesToBePopedOut; i++){ 
      stackOfActivity.peek().finish(); 
     } 
    } 
} 

Проблема заключается в том, что все итерации от FOR из «popActivitiesFromStack» выполняются до OnDestroy() выполняется, и что никакой активности не poped из в то время как для выполняется, и каждый конец (), вызываемый в FOR, переходит в одно и то же действие.

Так что мой вопрос: Почему в этом случае onDestroy() не выполняется сразу после финиша()?

ответ

0

Ваши предположения все неправильно :-(

Жизненный цикл вызовы нескольких мероприятий не выполняются в какой-либо определенной или детерминированной последовательности.

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

Android поддерживает стек действий в задаче, и вы можете использовать флаг , чтобы сделать то, что выre пытающийся сделать.

Смежные вопросы