在進行BlackBerry程序開發(fā)的時候,BlackBerry提供了一個管理Screen的棧,用來從任何地方來關(guān)閉位于最上一層的Screen,使 用UiApplication.getUiApplication().getActiveScreen()來得到位于最上一層的Screen的實例,并 且使用UiApplication.getUiApplication().popScreen()來關(guān)閉一個Screen或關(guān)閉當前最上一層的 Screen,但是Android卻未提供相應(yīng)的功能,只能在一個Activity的對象里面調(diào)用finish來關(guān)閉自己,不能關(guān)閉其他的 Activity。比如我們想實現(xiàn)一個功能從屏幕A—>屏幕B—>屏幕C—>屏幕D,然后在在轉(zhuǎn)到屏幕D之前將屏幕B和C關(guān)閉,在屏幕 B和屏幕C界面點擊會退按鈕都可以回退到上一個屏幕,但是在屏幕D上點擊會退按鈕讓其回退到A,此外在一些循環(huán)跳轉(zhuǎn)的界面上如果不在合適的地方將一些不需 要的屏幕關(guān)閉,那么經(jīng)過多次跳轉(zhuǎn)后回導致內(nèi)存溢出。對此我們可以設(shè)計一個全局的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){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
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) ){
break;
}
popActivity(activity);
}
}
}
posted on 2012-03-17 23:48
小果子 閱讀(313)
評論(0) 編輯 收藏 引用 所屬分類:
Android & Ios