您的位置:首页 > 运维架构 > 网站架构

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

2015-10-27 21:45 796 查看
体验一些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。

许多其他的用途。大家发现它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: