自定义Activity堆栈,不同版本中程序的退出

来源:互联网 发布:mac ping ip 端口 编辑:程序博客网 时间:2024/05/16 08:29
 

1、首先创建一个名为ScreenManager的类。

2、编写其代码,如下所列。

package wyf.ytl.utils;

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(){
  if(activityStack.size() == 0){
   return null;
  }
  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);
  }
 }
 public void exitApp(){
  while(true){
   Activity activity = currentActivity();
   if(activity==null){
    break;
   }
   popActivity(activity);
  }
 }
}
 }
 public void popAllActivityExceptOne(Class cls){
  while(true){
   Activity activity = currentActivity();
   if(activity==null){
    break;
   }
   if(activity.getClass().equals(cls) ){
    break;
   }
   popActivity(activity);
  }
 }
 public void exitApp(){
  while(true){
   Activity activity = currentActivity();
   if(activity==null){
    break;
   }
   popActivity(activity);
  }
 }
}

3、在每个Activity中的onCreate方法中调用自定义Activity栈中的pust方法,如下所示。

ScreenManager.getScreenManager().pushActivity(this);

4、重写所有Activity中的onKeyDown方法,拦截系统原有的返回键的处理,代码如下所示。

 /**
  * 拦截返回按键的方法
  */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
  case KeyEvent.KEYCODE_BACK:// 返回键
   Utils.showExitDialog(this);
   break;
  }
  return false;
 }

5、之后在需要退出应用程序时调用自定义Activity栈的退出方法即可。

ScreenManager.getScreenManager().exitApp();

原创粉丝点击