天天看點

android的activity棧管理

在進行blackberry程式開發的時候,blackberry提供了一個管理screen的棧,用來從任何地方來關閉位于最上一層的screen,使用uiapplication.getuiapplication().getactivescreen()來得到位于最上一層的screen的執行個體,并且使用uiapplication.getuiapplication().popscreen()來關閉一個screen或關閉目前最上一層的screen,但是android卻未提供相應的功能,隻能在一個activity的對象裡面調用finish來關閉自己,不能關閉其他的activity。比如我們想實作一個功能從螢幕a—>螢幕b—>螢幕c—>螢幕d,然後在在轉到螢幕d之前将螢幕b和c關閉,在螢幕b和螢幕c界面點選會退按鈕都可以回退到上一個螢幕,但是在螢幕d上點選會退按鈕讓其回退到a,此外在一些循環跳轉的界面上如果不在合适的地方将一些不需要的螢幕關閉,那麼經過多次跳轉後回導緻記憶體溢出。對此我們可以設計一個全局的activity棧,使用這個棧來管理activity。管理activity的類的定義如下:

import java.util.stack;     

import android.app.activity;     

public class screenmanager {     

    private static stack<activity> activitystack;     

    private static screenmanager instance;     

    private  screenmanager(){     

    }     

    public static screenmanager getscreenmanager(){     

        if(instance==null){     

            instance=new screenmanager();     

        }     

        return instance;     

    public void popactivity(){     

        activity activity=activitystack.lastelement();     

        if(activity!=null){     

            activity.finish();     

            activity=null;     

    public void popactivity(activity activity){     

            activitystack.remove(activity);     

    public activity currentactivity(){     

        return activity;     

    public void pushactivity(activity activity){     

        if(activitystack==null){     

            activitystack=new stack<activity>();     

        activitystack.add(activity);     

    public void popallactivityexceptone(class cls){     

        while(true){     

            activity activity=currentactivity();     

            if(activity==null){     

                break;     

            }     

            if(activity.getclass().equals(cls) ){     

            popactivity(activity);     

}    

繼續閱讀