体验一些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/

android应用框架构建------AppManager的更多相关文章

  1. php 使用 restler 框架构建 restfull api

    php 使用 restler 框架构建 restfull api restler 轻量级,小巧,构建restfull api非常方便! 官网:http://restler3.luracast.com/ ...

  2. Android视图框架

    Android视图框架 Android的UI系统是android应用系统框架最核心,最基础的内容! 1. Android视图系统.层次关系 Android应用设计和Web应用设计类似,也分前端和后端设 ...

  3. Android 应用框架 —— 组件

    本文内容根据个人自学整理记录,理解不当之处,希望大家批评指正,大家相互学习,写学习归纳,写博客是个好习惯,希望能够坚持下去. 在前一篇文章当中介绍了Android 的系统框架,主要是为了让大家对And ...

  4. android应用框架搭建------BaseActivity

    网上有很多介绍BaseActivity的博文,多数是从应用的角度去描述的. 这里,我所介绍的BaseActivity不同,主要从框架搭建的角度去介绍BaseActivity的使用. 先看代码: /** ...

  5. Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629598 前言:上篇中介绍O ...

  6. Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite

    Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...

  7. Android百大框架排行榜

    Android百大框架排行榜 15类Android通用流行框架 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/android-opensource- ...

  8. 2017年Android百大框架排行榜

    框架:提供一定能力的小段程序 >随意转载,标注作者"金诚"即可 >本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. >本文已经开源到Gith ...

  9. android 优秀框架整理

    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. ...

随机推荐

  1. Android LCD(三):Samsung LCD接口篇

    关键词:android LCD控制器 Framebuffer PWM  平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0  平台:samsung exy ...

  2. Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant

    Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant

  3. [置顶] JQuery实战总结三 标签页效果图实现

    在浏览网站时我们会看到当我们鼠标移到多个选项卡上时,不同的选项卡会出现自己对应的界面的要求,在同一个界面上表达了尽量多的信息.大大额提高了空间的利用率.界面的切换效果也是不错的哦,这次自己可以实现啦. ...

  4. Android四个多线程分析:MessageQueue实现

    Android四个多线程分析:MessageQueue的实现 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前面两篇文章<Android多线 ...

  5. Luci - UCI (Unified Configuration Interface)

    参考: http://wiki.openwrt.org/doc/techref/uc http://luci.subsignal.org/api/luci/modules/luci.model.uci ...

  6. MySQL 触发器例子(两张表同步增加和删除)

    以下两个例子来自:http://www.cnblogs.com/nicholas_f/archive/2009/09/22/1572050.html实测有效,但是原帖的分隔符不正确,因此稍作修改.其中 ...

  7. Java 并发编程(三)为线程安全类中加入新的原子操作

    Java 类库中包括很多实用的"基础模块"类.通常,我们应该优先选择重用这些现有的类而不是创建新的类.:重用能减少开发工作量.开发风险(由于现有类都已经通过測试)以及维护成本.有时 ...

  8. PHP socket类

    没事的时候自己封装了一个socket类 功能非常easy和curl功能是一样的 class socketClass{ private $host; private $url; private $err ...

  9. linux grep命令详解(转)

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  10. JPA @PersistenceContext和@Transactional Annotation

    JPA(Java Persistence API )也就是说,java存储数据API,它提供的接口更方便的存储数据,当然,经过一些复杂的,并需要使用查询操作Java Persistence query ...