• 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

  • 相关阅读:
    C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
    C#进阶系列——WebApi 接口测试工具:WebApiTestClient
    Web API在OWIN下实现OAuth
    C#进阶系列——WebApi 跨域问题解决方案:CORS
    C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
    C#进阶系列——WebApi 异常处理解决方案
    python标准库介绍——13 types 模块详解
    python标准库介绍——12 time 模块详解
    python标准库介绍——11 atexit 模块详解
    python标准库介绍——10 sys 模块详解
  • 原文地址:https://www.cnblogs.com/zl1991/p/6307580.html
Copyright © 2020-2023  润新知