Quantcast
Channel: Android*
Viewing all articles
Browse latest Browse all 531

Android 开发之应用程序如何完全退出

$
0
0

之前忘记在哪看到一篇关于“android应用程序如何完全退出”的Blog,写的不错,我想这对很多人都有用,为了文章的原创,因此我结合了自己的代码环境,把这个经验分享给大伙。

第一步:创建一个Activity管理类,用来管理所有被用户点击过而没有被finish()掉的Activity:

 

[java] view plaincopy
 
  1. import java.util.Stack;  
  2. import android.app.Activity;  
  3. import android.app.ActivityManager;  
  4. import android.content.Context;  
  5. /** 
  6.  * 应用程序Activity管理类:用于Activity管理和应用程序退出 
  7.  * @author hubin 
  8.  */  
  9. public class AppManager {  
  10.     private static Stack<BaseActivity> activityStack;  
  11.     private static AppManager instance;  
  12.    
  13.     private AppManager() {}  
  14.    
  15.     /** 
  16.      * 单实例 , UI无需考虑多线程同步问题 
  17.      */  
  18.     public static AppManager getAppManager() {  
  19.         if (instance == null) {  
  20.             instance = new AppManager();  
  21.         }  
  22.         return instance;  
  23.     }  
  24.    
  25.     /** 
  26.      * 添加Activity到栈 
  27.      * @param activity 
  28.      */  
  29.     <strong><span style="color:#ff0000;">public void addActivity(BaseActivity activity) {  
  30.         if (activityStack == null) {  
  31.             activityStack = new Stack<BaseActivity>();  
  32.         }  
  33.         activityStack.add(activity);  
  34.     }</span></strong>  
  35.    
  36.     /** 
  37.      * 获取当前Activity(栈顶Activity) 
  38.      */  
  39.     public BaseActivity currentActivity() {  
  40.         if (activityStack == null || activityStack.isEmpty()) {  
  41.             return null;  
  42.         }  
  43.         BaseActivity activity = activityStack.lastElement();  
  44.         return activity;  
  45.     }  
  46.    
  47.     /** 
  48.      * 获取当前Activity(栈顶Activity) 没有找到则返回null 
  49.      */  
  50.     public BaseActivity findActivity(Class<?> cls) {  
  51.         BaseActivity activity = null;  
  52.         for (BaseActivity aty : activityStack) {  
  53.             if (aty.getClass().equals(cls)) {  
  54.                 activity = aty;  
  55.                 break;  
  56.             }  
  57.         }  
  58.         return activity;  
  59.     }  
  60.    
  61.     /** 
  62.      * 结束当前Activity(栈顶Activity) 
  63.      */  
  64.     public void finishActivity() {  
  65.         BaseActivity activity = activityStack.lastElement();  
  66.         finishActivity(activity);  
  67.     }  
  68.    
  69.     /** 
  70.      * 结束指定的Activity(重载) 
  71.      */  
  72.     public void finishActivity(Activity activity) {  
  73.         if (activity != null) {  
  74.             activityStack.remove(activity);  
  75.             activity.finish();  
  76.             activity = null;  
  77.         }  
  78.     }  
  79.    
  80.     /** 
  81.      * 结束指定的Activity(重载) 
  82.      */  
  83.     public void finishActivity(Class<?> cls) {  
  84.         for (BaseActivity activity : activityStack) {  
  85.             if (activity.getClass().equals(cls)) {  
  86.                 finishActivity(activity);  
  87.             }  
  88.         }  
  89.     }  
  90.    
  91.     /** 
  92.      * 关闭除了指定activity以外的全部activity 如果cls不存在于栈中,则栈全部清空 
  93.      * @param cls 
  94.      */  
  95.     public void finishOthersActivity(Class<?> cls) {  
  96.         for (BaseActivity activity : activityStack) {  
  97.             if (!(activity.getClass().equals(cls))) {  
  98.                 finishActivity(activity);  
  99.             }  
  100.         }  
  101.     }  
  102.    
  103.     /** 
  104.      * 结束所有Activity 
  105.      */  
  106.     public void finishAllActivity() {  
  107.         for (int i = 0, size = activityStack.size(); i < size; i++) {  
  108.             if (null != activityStack.get(i)) {  
  109.                 activityStack.get(i).finish();  
  110.             }  
  111.         }  
  112.         activityStack.clear();  
  113.     }  
  114.    
  115.     /** 
  116.      * 应用程序退出,一般调用此方法即可! 
  117.      */  
  118.     <strong><span style="color:#ff0000;">public void AppExit(Context context) {  
  119.         try {  
  120.             finishAllActivity();  
  121.             ActivityManager activityMgr = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  122.             activityMgr.killBackgroundProcesses(context.getPackageName());  
  123.             System.exit(0);  
  124.         } catch (Exception e) {  
  125.             System.exit(0);  
  126.         }  
  127.     }</span></strong>  
  128. }  


第二步:要求所有的Activity类中在其onCreate()方法中:

 

 

[java] view plaincopy
 
  1. AppManager.getAppManager().addActivity(this);  


第三步:按其需求,由你自己决定啥时候调用AppExit()方法。

Icon Image: 

  • Android*
  • Developers
  • Professors
  • Students
  • Android*
  • Theme Zone: 

    Android

    Include in RSS: 

    1

    Viewing all articles
    Browse latest Browse all 531


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>