说明:大部分内容都是参考别的文章,这里做整理是为了以后的编程有实用的模板,可以即需即用。
import android.app.Activity;
import java.util.Stack;
/**
* Activity 管理类
*/
public class ActivityManager {
private Stack<Activity> activityStack;
private ActivityManager() {
}
public static final ActivityManager getInstance() {
return ActivityManagerHolder.instance;
}
private static class ActivityManagerHolder {
private static final ActivityManager instance = new ActivityManager();
}
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
public void removeActivity(Activity activity) {
if (activityStack != null) {
activityStack.remove(activity);
}
}
public Activity getActivity(Class<?> clazz) {
if (activityStack != null) {
for (Activity activity : activityStack) {
if (clazz.equals(activity.getClass())) {
return activity;
}
}
}
return null;
}
public Activity getCurrentActivity() {
if (activityStack != null) {
return activityStack.lastElement();
}
return null;
}
/**
* 获取所有 Activity
*/
public Stack<Activity> getAllActivityStacks() {
return activityStack;
}
/**
* 结束指定的 Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
if (!activity.isFinishing()) {
activity.finish();
activityStack.remove(activity);
}
}
}
/**
* 结束指定类名的 Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
break;
}
}
}
/**
* 结束除当前传入以外所有 Activity
*/
public void finishOthersActivity(Class<?> cls) {
if (activityStack != null) {
for (Activity activity : activityStack) {
if (!activity.getClass().equals(cls)) {
activity.finish();
}
}
}
}
/**
* 结束所有 Activity
*/
public void finishAllActivity() {
if (activityStack != null) {
for (Activity activity : activityStack) {
activity.finish();
}
}
activityStack.clear();
}
/**
* 退出 app 时调用
*/
public void exitApp() {
try {
finishAllActivity();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
对于 Activity 的管理是至关重要的,所以我们要创建 Activity 管理类用于 Activity 的管理,但是代码之间的耦合度也是需要重点关注,如果对于每个单独的 Activity 都分别处理入栈出栈等 Activity 管理操作,那么对于后期维护是很困难的;传统的方式是创建 BaseActivity,在 BaseActivity 中进行 Activity 的管理,但是并不是所有的 Activity 都会继承 BaseActivity,对于这些 “法外之徒” 又得怎么维护呢?
自 Android 4.0(API-14)开始,Application 中多了一个方法,可以设置全局监听 Activity 的生命周期:registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback),通过此方法就能够得到全局所有 Activity 生命周期的回调,因此我们可以从 Application 中全局监听所有 Activity 并对其进行管理,也就不用在每个 Activity 中单独处理重复的逻辑了。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
ActivityManager.getInstance().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) {
ActivityManager.getInstance().removeActivity(activity);
}
});
}
}
PS:使用 Log 日志工具作简要测试,如需满足较复杂的统计或调试需求时,此法可能会大大减少插入代码量,提高效率(不用在每个 Activity 的生命周期方法中单独打 Log 了)。
参考文章:
https://blog.csdn.net/blogblj/article/details/52068457
https://blog.csdn.net/tongcpp/article/details/40344871