Android项目实战(三十七):Activity管理及BaseActivity的实现

时间:2024-01-09 09:18:50

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 djlxqx@163.com
* 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 djlxqx@163.com
* 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的管理,以及一些别的操作。