一、概述
本章節主要是記錄一下平時android開發過程中activity的管理方法,我們通常在開發過程中可能會有突然退出app,或者獲取某個活動對象等等各種情況處理,這時候有個全局管理的Activity棧將會方便很多。
Android系統有自己的Activity管理機制,也就是 Activity Stack(棧),奉行着先進後出原則。所以,我們就通過Stack來進行Activity的管理。下邊我將記錄兩種不同的管理方法,可以根據情況選擇。
如有錯誤或優化之處,歡迎留言指導。
二、BaseActivity配合AppManager管理類
在項目構建初期,可能會創建一些base基類,通常我們都會創建一個BaseActivity來管理整個應用活動通用之處。這時候可以通過以下的AppManager工具類在BaseActivity的onCreate和onDestroy中進行activity管理。
核心代碼:
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import java.util.Stack;
public class AppManager {
// activity的管理棧
private static Stack<Activity> activityStack;
// 創建單例對象
private static AppManager instance;
private AppManager() {
}
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;
}
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
// 結束activity並移出管理棧
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
public void finishActivity(Class<?> cls) {
for (Activity activity: activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
public void finishAll() {
for (Activity activity: activityStack) {
activity.finish();
}
activityStack.clear();
}
// 退出應用
public void AppExit(Context context) {
try {
finishAll();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(context.getPackageName());
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、通過自定義Application類
爲了管理應用的全局變量和一些庫的初始化工作,自定義Application幾乎是我們項目開發時的必備工作。Android 4.0(API-14)開始,Application 中多了一個方法,可以設置全局監聽Activity的生命週期。這個方法就是:registerActivityLifecycleCallbacks
核心代碼:
import android.app.Activity;
import android.app.Application;
import android.os.Build;
import android.os.Bundle;
import java.util.Stack;
public class MyApplication extends Application {
private static MyApplication instance;
private static Stack<Activity> activityStack = new Stack<Activity>();
private MyApplication() {
}
public static MyApplication getInstance() {
if (instance == null) {
instance = new MyApplication();
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
registerActivityListener();
}
private void addActivity(Activity activity) {
if (activityStack != null && activity != null) {
activityStack.add(activity);
}
}
private void registerActivityListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
addActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
if (activityStack != null && activity != null) {
if (activityStack.contains(activity)) {
activityStack.remove(activity);
}
}
}
});
}
}
}