1. 程式人生 > >Android項目實戰(三十七):Activity管理及BaseActivity的實現

Android項目實戰(三十七):Activity管理及BaseActivity的實現

nbsp agen etc == tar fin email ted AD

原文:Android項目實戰(三十七):Activity管理及BaseActivity的實現

Ps:7-10月 完成公司兩個app項目上架。漏掉的總結 開始慢慢補上。

一、寫一個Activity的管理類

1、單例模式,以棧(先進後出)的形式存儲Activity對象

public class AppManager {
    private static Stack<Activity> activityStack;   // Activity棧  , 先進後出
    private static AppManager instance;

    /**
     * 單例模式實例
     
*/ public static AppManager getAppManager() { if (instance == null) { instance = new AppManager(); } return instance; } }

2、給AppManager管理類添加幾個常用方法。

(1)、添加Activity對象

    /**
     * 添加Activity到堆棧
     */
    public void addActivity(Activity activity) {
        
if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); }

(2)、結束當前Activity對象,即棧尾的對象

    /**
     * 結束當前Activity(堆棧中最後一個壓入的)
     */
    public void finishActivity() {
        Activity activity = activityStack.lastElement();
        
if (activity != null) { activity.finish(); activity = null; } }

(3)、獲取當前Activity對象,即棧尾對象

    /**
     * 獲取當前Activity(堆棧中最後一個壓入的)
     */
    public Activity currentActivity() {
        Activity activity = activityStack.lastElement();
        return activity;
    }

(4)、結束指定的Activity對象,參數為某個Activity對象

    /**
     * 結束指定的Activity
     */
    public void finishActivity(Activity activity) {
        if (activity != null) {
            activityStack.remove(activity);
            activity.finish();
            activity = null;
        }
    }

(5)、結束指定類名的Activity對象

    /**
     * 結束指定類名的Activity
     */
    public void finishActivity(Class<?> cls) {
        for (Activity activity : activityStack) {
            if (activity.getClass().equals(cls)) {
                finishActivity(activity);
            }
        }
    }

(6)、結束所有的Activity對象

   /**
     * 結束所有Activity
     */
    public void finishAllActivity() {
        for (int i = 0, size = activityStack.size(); i < size; i++) {
            if (null != activityStack.get(i)) {
                activityStack.get(i).finish();
            }
        }
        activityStack.clear();
    }

(7)、退出應用程序

    /**
     * 退出應用程序
     */
    public void AppExit(Context context) {
        try {
            finishAllActivity();
            ActivityManager activityMgr = (ActivityManager) context
                    .getSystemService(Context.ACTIVITY_SERVICE);
            activityMgr.restartPackage(context.getPackageName());
            System.exit(0);
        } catch (Exception e) {
        }
    }

完整代碼:

技術分享圖片
/*
* @author xqx
* @emil [email protected]
* create at 2017/6/12
* description: 管理activity的類
*/

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;

import java.util.Stack;

public class AppManager {
    private static Stack<Activity> activityStack;
    private static AppManager instance;

    /**
     * 單例模式實例
     */
    public static AppManager getAppManager() {
        if (instance == null) {
            instance = new AppManager();
        }
        return instance;
    }

    /**
     * 添加Activity到堆棧
     */
    public void addActivity(Activity activity) {
        if (activityStack == null) {
            activityStack = new Stack<Activity>();
        }
        activityStack.add(activity);
    }

    /**
     * 獲取當前Activity(堆棧中最後一個壓入的)
     */
    public Activity currentActivity() {
        Activity activity = activityStack.lastElement();
        return activity;
    }

    /**
     * 結束當前Activity(堆棧中最後一個壓入的)
     */
    public void finishActivity() {
        Activity activity = activityStack.lastElement();
        if (activity != null) {
            activity.finish();
            activity = null;
        }
    }

    /**
     * 結束指定的Activity
     */
    public void finishActivity(Activity activity) {
        if (activity != null) {
            activityStack.remove(activity);
            activity.finish();
            activity = null;
        }
    }

    /**
     * 結束指定類名的Activity
     */
    public void finishActivity(Class<?> cls) {
        for (Activity activity : activityStack) {
            if (activity.getClass().equals(cls)) {
                finishActivity(activity);
            }
        }
    }

    /**
     * 結束所有Activity
     */
    public void finishAllActivity() {
        for (int i = 0, size = activityStack.size(); i < size; i++) {
            if (null != activityStack.get(i)) {
                activityStack.get(i).finish();
            }
        }
        activityStack.clear();
    }

    /**
     * 退出應用程序
     */
    public void AppExit(Context context) {
        try {
            finishAllActivity();
            ActivityManager activityMgr = (ActivityManager) context
                    .getSystemService(Context.ACTIVITY_SERVICE);
            activityMgr.restartPackage(context.getPackageName());
            System.exit(0);
        } catch (Exception e) {
        }
    }

}
AppManager.java

二、BaseActivity的使用

/**
* @author xqx
* @email [email protected]
* blog:http://www.cnblogs.com/xqxacm/
* createAt 2017/06/13
* description: 基礎類, 對Activity 的管理
*/

public class BaseActivity extends Activity{
    /**
     * activity堆棧管理
     */
    protected AppManager appManager = AppManager.getAppManager();

    private String contextString ; // 類名

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 添加activity 到棧
        appManager.addActivity(this);

    }

    protected void onPause() {
        super.onPause();
        // 可以在此添加一些友盟的統計代碼等
    }

    protected void onResume() {
        super.onResume();
        // 可以在此添加一些友盟的統計代碼等
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 從棧中移除activity
        appManager.finishActivity(this);
    }

}

三、BaseFragmentActivity 的使用

public class BaseFragmentActivity extends FragmentActivity {
    /**
     * activity堆棧管理
     */
    protected AppManager appManager = AppManager.getAppManager();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 添加activity 到棧
        appManager.addActivity(this);

    }

    protected void onPause() {
        super.onPause();
        // 可以在此添加一些友盟的統計代碼等
    }

    protected void onResume() {
        super.onResume();
       // 可以在此添加一些友盟的統計代碼等
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 從棧中移除activity
        appManager.finishActivity(this);
    }
}

之後就可以基礎這兩個基礎類了,實現對Activity的管理,以及一些別的操作。

Android項目實戰(三十七):Activity管理及BaseActivity的實現