android 清除所有activity

android中清除所有activity的需求,还是在蛮多场景出现的,最近项目中有遇到,把解决方法贴出来,也标记下~
首先自定义一个ActivityManager管理类,用于管理栈中的activity

public class ActivityManager {
    private static final String TAG = "ActivityManager";
    private static Stack<Activity> activityStack;
    private static ActivityManager instance;
    private Activity currActivity;
    private ActivityManager() {
    }

    public static ActivityManager getActivityManager() {
        if (instance == null) {
            instance = new ActivityManager();
        }
        return instance;
    }


    //退出栈顶Activity 
    public void popActivity(Activity activity) {  
        if(activity == null || activityStack == null) {
            return;
        }
        if(activityStack.contains(activity)) {
            activityStack.remove(activity); 
        }
        currActivity = activity;
        //activity.finish();   

        //activity = null;
    }

    public void destoryActivity(Activity activity) {
        if(activity == null ) {
            return;
        }
        activity.finish();
        if(activityStack.contains(activity)) {
            activityStack.remove(activity); 
        }
        activity = null;
        ZLog.d(TAG, "destoryActivity=================");
    }

    //获得当前栈顶Activity
    public Activity currentActivity() {
        if(activityStack == null ||activityStack.empty()) {
            return null;
        }
        return activityStack.lastElement();
    }

    //将当前Activity推入栈中 
    public void pushActivity(Activity activity) { 
        if (activityStack == null) {
            activityStack = new Stack<Activity>();   
        }
        activityStack.add(activity);   
    }

    //退出栈中除指定的Activity外的所有   
    public void popAllActivityExceptOne(Class cls) {
         while (true) {
             Activity activity = currentActivity(); 
             if (activity == null) { 
                 break;
             }
             if (activity.getClass().equals(cls)) { 
                 break; 
             }
             destoryActivity(activity);
         }
    }

    //退出栈中所有Activity
    public void popAllActivity() {
        popAllActivityExceptOne(null);
    }

    public Activity getCurrentActivity()
    {
        return currActivity;
    }

    public int getActivityStackSize()
    {
        int size = 0;
        if (activityStack != null)
        {
            size = activityStack.size();
        }
        return size;
    }
}

然后,在你的baseActivity中的两个方法添加如下方法(如果没有baseActivity,就得一个个加了)

@Override
protected void onPause() {
    super.onPause();
    ActivityManager.getActivityManager().pushActivity(this);
}

@Override
protected void onResume() {
    super.onResume();
    ActivityManager.getActivityManager().popActivity(this);
}

最后,根据需求判断,在需要清除所有activity的地方,加上如下代码,我的是在baseActivity的onResume()方法中添加的

if(isRestart){      
    ActivityManager.getActivityManager().popAllActivity();
    Intent intent = new Intent(this,LoadingActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    isRestart = false;
    this.finish();
}

注意:清楚掉所有activity后,startActivity时需要给它加上Intent.FLAG_ACTIVITY_CLEAR_TOP,表示start的这个activity置顶,并二次清除掉所有这个activity之上的activity

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值