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

來源:互聯網
上載者:User

標籤:公司   程式   模式   tac   移除   resume   單例模式   catch   this   

原文: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的實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.