Android Activity 管理 (AppManager)(非原创)
AppManager 类:
/**
* 应用程序Activity管理类:用于Activity管理和应用程序退出
*
*/
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) {
// 为与系统Activity栈保持一致,且考虑到手机设置项里的"不保留活动"选项引起的Activity生命周期调用onDestroy()方法所带来的问题,此处需要作出如下修正
if(activity.isFinishing()){
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);
}
}
}
使用方法:
/**
* 对context进行初始化,并将当前的Activity加入到堆栈中,便于管理
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 添加Activity到堆栈
AppManager.getAppManager().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 结束Activity&从堆栈中移除
AppManager.getAppManager().finishActivity(this);
}
Android Activity 管理 (AppManager)(非原创)的更多相关文章
- android activity 管理器AMS----概述
AMS & WMS,应该是app端打交道最多的2个framwork层的service. ActivityManagerService 是android提供给用于管理Activity运行状态的系 ...
- android 多媒体数据库(非原创)
推荐文章:http://fzlihui.iteye.com/blog/1097952,http://www.cnblogs.com/pen-ink/archive/2011/06/02/2068410 ...
- Android Activity管理类
public class AppManager { private static Stack<Activity> activityStack; private static AppMana ...
- Android ListView使用(非原创)
1.ListView:它以列表的形式展示具体要显示的内容,并且能够根据数据的长度自适应屏幕显示 <LinearLayout xmlns:android="http://schemas. ...
- Android Activity 管理
- 转 Android Activity之间动画完整版详解
标签:Android Activity动画详解 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mzh3344258.blog.5 ...
- 【Android工具类】Activity管理工具类AppManager
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 import java.util.Stack; import android.app.Activity; i ...
- 【原创】android内存管理-内存泄漏原因
转载请注明出处 http://www.cnblogs.com/weiwangnuanyang/p/5704596.html 先讲一下内存泄漏的概念:内存泄露是指无用对象持续占有内存,或者内存得不到及时 ...
- Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...
随机推荐
- 【转】如何提高意志力&如何坚持每天学习
第一篇如何提高意志力 有一种品质可以使一个人在碌碌无为的平庸之辈中脱颖而出,这个品质不是天资,不是教育,也不是智商,而是自律.有了自律,一切皆有可能,无,则连最简单的目标都显得遥不可及.–西奥多·罗斯 ...
- [小工具]EquationCalcular
名称:EquationCalcular 版本:V1.0.0 更新日期:2015/9/27 简要介绍:本工具用于计算范围比较有限的方程及方程组,仅仅局限于n元一次方程组,欢迎需要的小学生和初中生来玩 ...
- cookie小析
cookie用于存储数据,当用户访问了某个网站(网页)时,我们就可以通过cookie来向访问者电脑上存储数据1.不同的浏览器存放的cookie位置不同,也不能通用2.cookie的存储是以域名的形式进 ...
- scala and machine learning
http://download.csdn.net/album/detail/3376 scala and machine learning
- 关于div的滚动条滚动到底部,内容显示不全的问题。(已解决)
今天我做了一个带有滚动条,底部有两个按钮的div. 当我拖动滚动条到底部, 按钮没有显示出来. 我看了看我的样式设置,是这样的: /* 内容样式 */ #contentPartDiv{ posit ...
- 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法)
原题 看到那么多人看到前面这么糟粕的代码各种不忍直视后,楼主还是把最终实现放在页首吧. Console.WriteLine("说出三个不同的特殊数,用','隔开 &q ...
- windows下读取磁盘扇区数据
在Windows下,磁盘可以看做是一个文件,其文件名为\\\\.\\PhysicalDriveX,其中X表示磁盘的编号,例如\\\\.\\PhysicalDrive0表示的是第0号磁盘,如果需要读取一 ...
- 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向
数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...
- ccpcfinal总结
ccpcfinal拿了块铁回来了... 虽然一开始知道我们三个过去 应该就是铁了.. 然而之后训练了几场区域赛的题 感觉 还是有希望拿个铜的... 不过..当出发前听说一共有120个队之后..不过我觉 ...
- [react-router] hashHistory 和 browserHistory 的区别
react-router提供了三种方式来实现路由,并没有默认的路由,需要在声明路由的时候,显式指定所使用的路由. //v1.x <Router/> //v2.0.0 // hash his ...