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的類的定義如下:
[html]
view plaincopy
- 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);
- }
- }
- }
最後更新:2017-04-03 07:57:14