2012-03-13 52 views
0

我有4個不同的活動,並通過鏈接創建了一個樣本。在Android中處理Activity Stack,我用我的方法泄漏內存嗎?

Objective:

Activities A,B,C,D;

A -> B -> C -> D

在d事件導致CD彈出堆棧離開A and B

D中的事件可能導致BCD到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只有一個實例沒有泄漏任何內存

回答

1

你應該看看Intents標誌FLAG_ACTIVITY_CLEAR_TOP。將此標誌添加到您的Intent將完全符合您嘗試使用自己的活動堆棧實現的目標,並且您不再需要該標誌。

+0

是的Ovidiu,我理解這種方法,它似乎與我目前的要求完美地工作,只是一個更多的查詢與你的方法,它是否再次調用整個活動(創建一個新的)還是它是同一活動從顯示堆棧? – 2012-03-13 11:23:56

+0

因爲我相信你的方法不會保存初始化的值,並且會重新初始化,因爲它會調用'onCreate()' – 2012-03-13 11:28:43

+0

將A和B設置爲singleTask,因此不會重新初始化A和B再次,他們的onNewIntent()將被稱爲 – chengbo 2012-03-13 11:44:45

1

如果你使用這個,那麼就不需要維護你自己堆疊。

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但有時它不會work.Sometimes它彈出只有頂。

+0

反正你的接近對維護堆棧很有好處。如果你已經完成了它,你可以給它的MaintainMyStack類的實現。 – Ani 2012-09-21 07:47:23