使用自定義的Activity棧來管理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 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 ();
}
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);
}
}
}

相關文章
相關標籤/搜索