android应用框架构建------AppManager

时间:2021-11-07 20:17:01

体验一些Android应用程序开发的个人总结

当我们开发应用程序。经常有非常多非常多activity,在这一刻,我们需要一个activity堆栈,以帮助管理activity的finish和start。

搭OSC安德鲁斯client案例。代码使用了一个stack<Activity>来保存所有的activity。

/**
* 应用程序Activity管理类:用于Activity管理和应用程序退出
*
* @author kymjs
* @version 1.0
* @created 2013-11-24
*/
public class AppManager {
private static Stack<BaseActivity> activityStack;
private static AppManager instance; private AppManager() {
} /**
* 单实例 , UI无需考虑多线程同步问题
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
} /**
* 加入Activity到栈
*/
public void addActivity(BaseActivity activity) {
if (activityStack == null) {
activityStack = new Stack<BaseActivity>();
}
activityStack.add(activity);
} /**
* 获取当前Activity(栈顶Activity)
*/
public BaseActivity currentActivity() {
if (activityStack == null || activityStack.isEmpty()) {
return null;
}
BaseActivity activity = activityStack.lastElement();
return activity;
} /**
* 获取当前Activity(栈顶Activity) 没有找到则返回null
*/
public BaseActivity findActivity(Class<? > cls) {
BaseActivity activity = null;
for (BaseActivity aty : activityStack) {
if (aty.getClass().equals(cls)) {
activity = aty;
break;
}
}
return activity;
} /**
* 结束当前Activity(栈顶Activity)
*/
public void finishActivity() {
BaseActivity activity = activityStack.lastElement();
finishActivity(activity);
} /**
* 结束指定的Activity(重载)
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
} /**
* 结束指定的Activity(重载)
*/
public void finishActivity(Class<? > cls) {
for (BaseActivity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
} /**
* 关闭除了指定activity以外的所有activity 假设cls不存在于栈中,则栈所有清空
*
* @param cls
*/
public void finishOthersActivity(Class<? > cls) {
for (BaseActivity 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.killBackgroundProcesses(context.getPackageName());
System.exit(0);
} catch (Exception e) {
System.exit(0);
}
}
}

这里是对整个应用的activity操作,能够看到,有退出应用的方法。关闭指定activity的方法,关闭所有activity的方法,以及关闭除了指定activity以外的所有activity。

那么说一下这个类的作用吧,首先。该类使用一个单例模式去管理,使得整个应用在不论什么地方都能够訪问这个activity栈。这样就方便了应用的操作。

比如我们能够这样定义一个Toast

public static showMessage(String msg){
Toast.makeText(AppManager.getAppManager().currentActivity(), msg, Toast.LENGTH_SHORT).show();
}

能够看到。我们定义了一个能够在全局使用的Toast,不再受Context的限制,当然在使用之前你须要首先确定你的应用没有被系统销毁。

再比方我们有时候在一个service中做业务处理,然后想返回处理结果的时候。却不知道当时的activity是否依然存在(它有可能已经被用户关闭)。此时就能够使用activity栈获取到当前栈顶的activity通过instanceofkeyword推断是否是我们想要的activity。

许多其他的用途。大家发现它。

版权声明:原创文章,转载请注明来自 http://kymjs.com/