Android:Activity统一堆栈管理(实现随时finish特定或是所有Activty)

来源:互联网 发布:淘宝100元xbox360手柄 编辑:程序博客网 时间:2024/05/29 15:08

在我们App运行时,可能在某个界面需要退出App,如果你没有把之前的Activity都finish掉的话(每次跳转都把前一个Activity finish掉,虽然可以实现,但本人不建议这种写法,因为有的Activity需要反复调用,不能每一次都取create),那么当你点击返回键的时候,并不能实现直接退出,这种时候,就需要我们对Activity做一个统一的管理。

原理是,写一个BaseActivity继承自Activity,然后在Oncreate方法里,把当前的Activity加到我们Activity管理容器里,然后在需要的时候,遍历这个容器,把所有Activity都finish掉。

直接上代码:

Activity管理类:AppManager

[java] view plain copy
  1. /** 
  2.  * 应用程序Activity管理类:用于Activity管理和应用程序退出 
  3.  * 
  4.  * @author BiHaidong 
  5.  * @version 1.0 
  6.  * @created 2015-9-21 
  7.  */  
  8. public class AppManager {  
  9.     private static Stack<Activity> activityStack = new Stack<Activity>();  
  10.   
  11.     /** 
  12.      * 添加Activity到堆栈 
  13.      */  
  14.     public static void addActivity(Activity activity) {  
  15.         activityStack.push(activity);  
  16.     }  
  17.   
  18.     /** 
  19.      * 获取当前Activity(堆栈中最后一个压入的) 
  20.      */  
  21.     public static Activity currentActivity() {  
  22.         return activityStack.lastElement();  
  23.     }  
  24.   
  25.     /** 
  26.      * 结束当前Activity(堆栈中最后一个压入的) 
  27.      */  
  28.     public static void finishCurrentActivity() {  
  29.         Activity activity = activityStack.pop();  
  30.         activity.finish();  
  31.     }  
  32.   
  33.     /** 
  34.      * 结束指定的Activity 
  35.      */  
  36.     public static void finishActivity(Activity activity) {  
  37.         if (activity != null) {  
  38.             activityStack.remove(activity);  
  39.             if(!activity.isFinishing()) {  
  40.                 activity.finish();  
  41.             }  
  42.         }  
  43.     }  
  44.   
  45.     /** 
  46.      * 结束指定类名的Activity 
  47.      */  
  48.     public static void finishActivity(Class<?> cls) {  
  49.         for (Activity activity : activityStack) {  
  50.             if (activity.getClass().equals(cls)) {  
  51.                 finishActivity(activity);  
  52.             }  
  53.         }  
  54.     }  
  55.   
  56.     /** 
  57.      * 结束所有Activity 
  58.      */  
  59.     public static void finishAllActivity() {  
  60.         for (Activity activity : activityStack) {  
  61.             if (activity != null) {  
  62.                 activity.finish();  
  63.             }  
  64.         }  
  65.         activityStack.clear();  
  66.     }  
  67.   
  68.     /** 
  69.      * 退出应用程序 
  70.      */  
  71.     public static void AppExit(Context context) {  
  72.         try {  
  73.             finishAllActivity();  
  74.             ActivityManager manager = (ActivityManager) context  
  75.                     .getSystemService(Context.ACTIVITY_SERVICE);  
  76.             manager.killBackgroundProcesses(context.getPackageName());  
  77.             System.exit(0);  
  78.         } catch (Exception e) {  
  79.             e.printStackTrace();  
  80.         }  
  81.     }  
  82. }  

然后是BaseActivity

[java] view plain copy
  1. public class BaseActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         super.setContentView(R.layout.base_layout);  
  6.   
  7.         AppManager.addActivity(this);  
  8. }  


这样,我们只要把自己的Activity继承自BaseActivity,就可以了。然后在需要的时候调用AppManager的对应方法。
阅读全文
1 0
原创粉丝点击