android应用框架构建------AppManager
体验一些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的更多相关文章
- php 使用 restler 框架构建 restfull api
php 使用 restler 框架构建 restfull api restler 轻量级,小巧,构建restfull api非常方便! 官网:http://restler3.luracast.com/ ...
- Android视图框架
Android视图框架 Android的UI系统是android应用系统框架最核心,最基础的内容! 1. Android视图系统.层次关系 Android应用设计和Web应用设计类似,也分前端和后端设 ...
- Android 应用框架 —— 组件
本文内容根据个人自学整理记录,理解不当之处,希望大家批评指正,大家相互学习,写学习归纳,写博客是个好习惯,希望能够坚持下去. 在前一篇文章当中介绍了Android 的系统框架,主要是为了让大家对And ...
- android应用框架搭建------BaseActivity
网上有很多介绍BaseActivity的博文,多数是从应用的角度去描述的. 这里,我所介绍的BaseActivity不同,主要从框架搭建的角度去介绍BaseActivity的使用. 先看代码: /** ...
- Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629598 前言:上篇中介绍O ...
- Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...
- Android百大框架排行榜
Android百大框架排行榜 15类Android通用流行框架 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/android-opensource- ...
- 2017年Android百大框架排行榜
框架:提供一定能力的小段程序 >随意转载,标注作者"金诚"即可 >本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. >本文已经开源到Gith ...
- android 优秀框架整理
程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. ...
随机推荐
- NOJ1184 失落的邮票 哈希表
意甲冠军 我们共收集N邮票.现在失去了2张,剩下N-2张-..原集邮收集了所有对.因此,找到什么两枚邮票是一个.它们输出. (确定缺少邮票是不一样的) 思路 由于编号比較大,能够用hash表压缩成数组 ...
- Android它SDK Manager无法更新终极解决方案
前些日子.Google终于发布Android5.0正式版--棒糖.也许你和我一样,,此外,我想在第一时间更新SDK,结果打开SDK Manager,但令人失望,络围墙啊.默默问一句:近期好久没有听到方 ...
- 用XAML做网页!!—开篇
原文:用XAML做网页!!-开篇 这几日一直没发表新文章,一来是因为事比较多,二来就是我在研究使用XAML挑战传统HTML来做网页,这很可能是在全球的首次尝试,至少我从未找到任何可供参考的相关资料. ...
- SVN 的revert操作
- Eclipse中的SVN的冲突解决方案详解
版本冲突原因: 假设A.B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns ...
- Android---53---多线程下载
采用HttpURLConnection HttpURLConnection从继承URLConnection,它也可以被用来发送到指定的网站GET求 POST求. 办法: int getResponse ...
- hdu2457 Trie图+dp
hdu2457 给定n个模式串, 和一个文本串 问如果修改最少的字符串使得文本串不包含模式串, 输出最少的次数,如果不能修改成功,则输出-1 dp[i][j] 表示长度为i的字符串, 到达状态j(Tr ...
- uva297(quadtree)
给我们两棵quadtree的前序遍历,要我吗求原来32*32的矩阵有多少个位置是黑的 quardtree是将区域划分为相等的4个子空间,然后再递归划分这4个子空间,知道满足条件后终止划分 这题的终止条 ...
- SSO(Single Sign On)系列(一)--SSO简单介绍
任何类型的站点,到达一定规模之后一定会存在这种问题:比方我们有N个系统.传统方式下我们就须要有N对不同的username和password,本来这些系统的开发都能为我们带来良好的效益,用户在用的时候并 ...
- Java使用LdAP获取AD域用户
随着我们的习大大上台后,国家在网络信息安全方面就有了非常明显的改变!所以如今好多做网络信息安全产品的公司和须要网络信息安全的公司都会提到用AD域server来验证,这里就简单的研究了一下! 先简单的讲 ...