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的管理,以及一些别的操作。