android 对activity进行管理
2017-08-04 17:26
302 查看
今天在写项目的时候遇到的一个问题,从mainActivity开始连续跳转了五个activity,再从最后一个回到mainActivity的时候,点击back键退出程序的时候遇到了问题,虽然点击back了,但是却回退到了上一页,这时想到了需要一个activityManager管理类进行activity的管理,代码如下。
public class ActivityManager {
public static Stack<Activity> mActivityStack;
private static ActivityManager instance;
private ActivityManager() {
}
public static ActivityManager getInstance() {
if (instance == null) {
instance = new ActivityManager();
}
return instance;
}
// 退出栈顶Activity
public void popActivity(Activity activity) {
if (activity != null) {
activity.finish();
mActivityStack.remove(activity);
activity = null;
}
}
// 获得当前栈顶Activity
public Activity currentActivity() {
Activity activity = mActivityStack.lastElement();
return activity;
}
/** 获取栈底部的Activity **/
public Activity firstElement() {
Activity activity = mActivityStack.firstElement();
return activity;
}
// 将当前Activity推入栈中
public void pushActivity(Activity activity) {
if (mActivityStack == null) {
mActivityStack = new Stack<Activity>();
}
mActivityStack.add(activity);
}
// 退出栈中所有Activity
public void popAllActivityExceptOne(Class<? extends Activity> cls) {
while (true) {
Activity activity = firstElement();
if (activity == null) {
break;
}
if (activity.getClass().equals(cls)) {
break;
}
popActivity(activity);
}
}
// 退出其他的activity
public void popAllOtherActivity(Class<? extends Activity> cls) {
for (int i = 0; i < mActivityStack.size(); i++) {
Activity activity = mActivityStack.get(i);
if (!activity.getClass().equals(cls)) {
popActivity(activity);
}
}
}
} 但是这还不算完,需要在BaseActivity中的OnCreate方法和OnDestory方法里分别写pushActivity和popActivity,将MainActivity的启动模式设置为 android:launchMode="singleTask",好了,写到这里,我们就需要去测试一下,发现不会再出现上述的问题了。
public class ActivityManager {
public static Stack<Activity> mActivityStack;
private static ActivityManager instance;
private ActivityManager() {
}
public static ActivityManager getInstance() {
if (instance == null) {
instance = new ActivityManager();
}
return instance;
}
// 退出栈顶Activity
public void popActivity(Activity activity) {
if (activity != null) {
activity.finish();
mActivityStack.remove(activity);
activity = null;
}
}
// 获得当前栈顶Activity
public Activity currentActivity() {
Activity activity = mActivityStack.lastElement();
return activity;
}
/** 获取栈底部的Activity **/
public Activity firstElement() {
Activity activity = mActivityStack.firstElement();
return activity;
}
// 将当前Activity推入栈中
public void pushActivity(Activity activity) {
if (mActivityStack == null) {
mActivityStack = new Stack<Activity>();
}
mActivityStack.add(activity);
}
// 退出栈中所有Activity
public void popAllActivityExceptOne(Class<? extends Activity> cls) {
while (true) {
Activity activity = firstElement();
if (activity == null) {
break;
}
if (activity.getClass().equals(cls)) {
break;
}
popActivity(activity);
}
}
// 退出其他的activity
public void popAllOtherActivity(Class<? extends Activity> cls) {
for (int i = 0; i < mActivityStack.size(); i++) {
Activity activity = mActivityStack.get(i);
if (!activity.getClass().equals(cls)) {
popActivity(activity);
}
}
}
} 但是这还不算完,需要在BaseActivity中的OnCreate方法和OnDestory方法里分别写pushActivity和popActivity,将MainActivity的启动模式设置为 android:launchMode="singleTask",好了,写到这里,我们就需要去测试一下,发现不会再出现上述的问题了。
相关文章推荐
- Android通过栈对Activity进行管理避免内存溢出
- Android通过栈对Activity进行管理避免内存溢出
- Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)
- Android WebView环境下打开相机、文件管理进行上传
- Android源码学习(2)使用Git和Repo进行版本管理
- [Android新手学习笔记05]-如何进行活动Activity之间的跳转以及数据传递
- MVP项目研究——AppManager融合Dagger2和androidEventbus管理Activity的生命周期
- Android 之ActivityThead、ActivityManagerService 与activity的管理和创建
- Android学习之管理Activity的生命周期
- Android源码学习之四-ActivityGroup是如何对嵌入的Activitys进行管理的
- android连接sqlite进行简单的增删改查和事务管理
- [Android知识体系]之四大组件:activity(生命周期管理)
- android中的sqlit3数据库进行手机应用软件开发(自写的一个财务管理软件,这里主要讲收入录入模块)
- android 笔记之------Activity:如何进行屏幕切换
- Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Android源码学习之二-Activity如何管理对话框
- Android 之ActivityThead、ActivityManagerService 与activity的管理和创建
- android:manageSpaceActivity让应用手动管理应用的数据目录
- android之利用activity进行弹窗dialog显示版本更新
- Android源码学习之二-Activity如何管理对话框