zoukankan      html  css  js  c++  java
  • Android—一次清除所有Activity

    首先,自定义一个ActivityManager管理类,用于管理栈中的Activity

     1 public class ActivityManager{
     2     private static final String TAG = "ActivityManager";
     3     private static Stack<Activity> activityStack;
     4     private static ActivityManager instance;
     5     private Activity currActivity;
     6     private ActivityManager(){
     7     }
     8 
     9     public static ActivityManager getActivityManager(){
    10         if(instance == null){
    11             instance = new ActivityManager();
    12         }
    13         return instance;
    14     }
    15 
    16     //退出栈顶Activity
    17     public void popActivity(Activity activity){
    18         if(activity == null || activityStack == null){
    19             return;
    20         }
    21         if(activityStack.contains(activity)){
    22             activityStack.remove(activity);
    23         }
    24         currActivity = activity;
    25         //activity.finish;
    26 
    27     }
    28 
    29     public void destoryActivity(Activity activity){
    30         if(activity == null){
    31             return;
    32         }
    33         activity.finish();
    34         if(activityStack.contains(activity)){
    35             activityStack.remove(activity);
    36         }
    37         activity=null;
    38     }
    39 
    40     //获得当前栈顶Activity
    41     public Activity currentActivity(){
    42         if(activityStack == null||activityStack.empty()){
    43             return null;
    44         }
    45         return activityStack.lastElement();
    46     }
    47 
    48     //将当前Activity推入栈中
    49     public void pushActivity(Activity activity){
    50         if(activityStack == null){
    51             activityStack = new Stack<Activity>();
    52         }
    53         activityStack.add(activity);
    54     }
    55 
    56     //退出栈中除指定的Activity外所有
    57     public void popAllActivityExceptOne(Class cls){
    58         while(true){
    59             Activity activity = currentActivity();
    60             if(activity == null){
    61                 break;
    62             if(activity.getClass().equals(cls))
    63                 break;
    64             destroyActivity(activity);
    65         }
    66     }
    67 
    68     //退出栈中所有Activity
    69     public void popAllActivity(){
    70         popAllActivityExceptOne(null);
    71     }
    72 
    73     public Activity getCurrentActivity(){
    74         return currActivity;
    75     }
    76 
    77     public int getActivityStackSize(){
    78         int size = 0;
    79         if(activityStack != null){
    80             size = activityStack.size();
    81         }
    82         return size;
    83     }
    84 }

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

     1 @Override
     2 protected void onPause(){
     3     super.onPause();
     4     ActivityManager.getActivityManager().pushActivity(this);
     5 }
     6 
     7 @Override
     8 protected void onResume(){
     9     super.onResume();
    10     ActivityManager.getActivityManager().popActivity(this);
    11 }

    最后,根据需求判断,在需要清除所有activity的地方,加上如下代码

    1 if(isRestart){
    2     ActivityManager.getActivityManager().popAllActivity();
    3     Intent intent = new Intent(this, LoadingActivity.class);
    4     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    5     startActivity(intent);
    6     isRestart=false;
    7     this.finish();
    8 }

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

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

  • 相关阅读:
    UVa 291 The House Of Santa Claus——回溯dfs
    (优先)队列简单总结
    POJ 2255 Tree Recovery——二叉树的前序遍历、后序遍历、中序遍历规则(递归)
    博弈论入门 Bash 、Nim 、Wythoff's Game结论及c++代码实现
    UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索
    欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍
    51nod 1135 原根 (数论)
    「学习笔记」扩展KMP (简)
    「解题报告」[luoguP6594]换寝室 (二分答案 树形DP)
    「解题报告」[luoguP6585]中子衰变 (交互题 分类讨论)
  • 原文地址:https://www.cnblogs.com/zl1991/p/6307580.html
Copyright © 2011-2022 走看看