Обработка стека активности в Android, я теряю память с моим подходом. - PullRequest
0 голосов
/ 13 марта 2012

У меня есть 4 различных вида деятельности, и, пройдя по ссылкам, я создал образец для этого.

Objective:

Activities A,B,C,D;

A -> B -> C -> D

Событие в D заставляет C и D выскочить Оставляя A and B в стеке.

Событие в D может вызвать B C и D кPOP оставляя только A в стеке.

Implementation:

Я использую следующее Событие для своих первых трех действий, т.е. A B C

if(v==buttonNext){
        Intent secondAct=new Intent(FirstActivity.this, SecondActivity.class);
        //storing the Stack
         MaintainMyStack.addBackActivity(this); 
        startActivity(secondAct);
    }

Я используюследующее событие для моего четвертого акта.т. е. D

if(v==btnBack){
        finish();//finishes  "D"
        Activity act=MaintainMyStack.getBackActivity();

        act.finish(); //finishes last in stack i.e. "C"
    }

Я использую этот общий класс среди моих A B C D занятий.

public class MaintainMyStack  {
    private static Stack<Activity> classes = new Stack<Activity>();

    public static Activity getBackActivity() {
    return classes.pop();
    }
    public static void addBackActivity(Activity c) {
    classes.push(c);
    }
}

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

Ответы [ 2 ]

1 голос
/ 21 сентября 2012

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

Intent intent = new Intent(FourthActivity.this,MainActivity.class);
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
FourthActivity.this.startActivity(intent);

Вы можете использовать FLAG_ACTIVITY_CLEAR_TOP, но иногда это не сработает. Иногда оно вызывает только верхнюю активность.

1 голос
/ 13 марта 2012

Вы должны взглянуть на флаг Intents FLAG_ACTIVITY_CLEAR_TOP . Добавление этого флага к вашему Intent сделает именно то, что вы пытаетесь достичь с помощью своего собственного стека активности, и вам это больше не понадобится.

...