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

public class ActivityManager {    private static final String TAG = "ActivityManager";    private static Stack 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();           }        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,就得一个个加了)

@Overrideprotected void onPause() {    super.onPause();    ActivityManager.getActivityManager().pushActivity(this);}@Overrideprotected 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

更多相关文章

  1. Android中设置屏幕全屏两种方法:
  2. Android(安卓)蓝牙开发浅析
  3. 两种button点击后改变颜色的方法selectot和重写
  4. Android(安卓)View类属性及方法
  5. [Android][SystemUI]navigationbar 3个虚拟键隐藏与显示
  6. Android常用Manager
  7. 从J2EE转向Android的第八天-----Toast
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 一步步做Android增强型图片浏览器
  2. Android 蓝牙对等通信初探
  3. Android(安卓)View/ViewRoot泄漏但Activi
  4. Android(安卓)3D旋转动画——Rotate3dAni
  5. Android属性动画(详解)
  6. Android远程图片获取和本地缓存
  7. 详解C#开发Android应用程序的流程
  8. Android面试题(华为):Android 的优势与不足
  9. Android的消息处理机制——Looper,Handle
  10. Android studio 使用心得(八)----测试程