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

本文介绍了一个用于管理Android应用中Activity的自定义类ScreenManager。通过该类可以实现Activity的压栈、弹栈操作,并提供了退出应用的功能。此外还展示了如何在Activity中使用此类。

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值