首先,自定义一个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; } public void destoryActivity(Activity activity){
if(activity == null){
return;
}
activity.finish();
if(activityStack.contains(activity)){
activityStack.remove(activity);
}
activity=null;
} //获得当前栈顶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;
destroyActivity(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的地方,加上如下代码

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

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

转自:http://blog.csdn.net/a394268045/article/details/51648149

Android—一次清除所有Activity的更多相关文章

  1. 退出Android程序时清除所有activity的实现方法

    思路: 1. 自定义ActivityList管理类,添加删除维护该list; 2.Activity Stack 类似上面: 3.singleTask定义一个Activity为该启动模式,然后当返回时, ...

  2. Android总结篇系列:Activity Intent Flags及Task相关属性

    同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...

  3. Android 一次退出所有activity的方法

    转自:http://bbs.51cto.com/thread-970933-1.html 因为android的API中没有提供一次性退出的接口所以想要在多activity的程序里面一次性退出的话就要费 ...

  4. 查看Android应用包名、Activity的几个方法

    一.有源码情况 直接打开AndroidManifest.xml文件,找到包含android.intent.action.MAIN和android.intent.category.LAUNCHER对应的 ...

  5. 【转】Android总结篇系列:Activity Intent Flags及Task相关属性

    [转]Android总结篇系列:Activity Intent Flags及Task相关属性 同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http:// ...

  6. android Application Component研究之Activity(二)

    http://blog.csdn.net/windskier/article/details/7172710 本文为原创文章,欢迎转载!转载时请注明出处:http://blog.csdn.net/wi ...

  7. 【appium】查看Android应用包名、Activity的几个方法

    一.有源码情况 直接打开AndroidManifest.xml文件,找到包含android.intent.action.MAIN和android.intent.category.LAUNCHER对应的 ...

  8. Android面试收集录1 Activity+Service

    1.Activity的生命周期 1.1.首先查看一下Activity生命周期经典图片. 在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->on ...

  9. Android SDK上手指南:Activity与生命周期

    Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...

随机推荐

  1. 从几率到logisitic函数

    odds 几率,又称事件的优势比.几率和概率的关系如下: o=p1−pp=o1+o Logistic 回归模型的因变量只有 1/0 两种取值.假设在 p 个独立自变量 x1,x2,…,xp 作用下,记 ...

  2. [adb 学习篇] python将adb命令集合到一个工具上

    https://testerhome.com/topics/6938 qzhi的更全面,不过意思是一样的,另外补充一个开源的https://github.com/264768502/adb_wrapp ...

  3. ibatis 动态SQL

    直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,I ...

  4. iOS学习笔记28-系统服务(一)短信和邮件

    一.系统应用 在开发某些应用时,我们可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,或者直接调用安装的第三方应用,这个要怎么实现呢? 这里统一使用UIApplication的一个对象方法 ...

  5. 【Luogu】P2486染色(树链剖分)

    题目链接 线段树维护左端颜色,右端颜色,颜色段数量. 合并的时候看左子树的右端颜色是不是等于右子树的左端颜色,如果等于那么颜色段数量要-1S 然后在树剖跳链的时候搞同样的操作qwq 然后就没有然后了 ...

  6. P1382 楼房 (扫描线,线段树)

    题目描述 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i]).地平线高度为0.在轮廓 ...

  7. bzoj 4566 [Haoi2016]找相同字符SA

    4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 128  Solved: 75[Submit][Status ...

  8. 用户认证系统 django.contrib.auth模块

    一 导入auth模块 from django.contrib.auth.models import User from django.contrib import auth auth模块的操作针对的就 ...

  9. 切糕(bzoj 3144)

    Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x, ...

  10. gcc 编译时 库链接

    gcc -l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把 ...