`
yangwei0915
  • 浏览: 465174 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

使用自定义的Activity栈来管理android的Activity

阅读更多

在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplication().getActiveScreen()来得到位于最上一层的Screen的实例,并且使用UiApplication.getUiApplication().popScreen()来关闭一个Screen或关闭当前最上一层的Screen,但是Android却未提供相应的功能,只能在一个Activity的对象里面调用finish来关闭自己,不能关闭其他的Activity。比如我们想实现一个功能从屏幕A—>屏幕B—>屏幕C—>屏幕D,然后在在转到屏幕D之前将屏幕B和C关闭,在屏幕B和屏幕C界面点击会退按钮都可以回退到上一个屏幕,但是在屏幕D上点击会退按钮让其回退到A,此外在一些循环跳转的界面上如果不在合适的地方将一些不需要的屏幕关闭,那么经过多次跳转后回导致内存溢出。对此我们可以设计一个全局的Activity栈,使用这个栈来管理Activity。管理Activity的类的定义如下:

import java.util.Stack;

import android.app.Activity;

public class ScreenManager {
	private static Stack<Activity> activityStack;
	private static ScreenManager instance;
	private  ScreenManager(){
	}
	public static ScreenManager getScreenManager(){
		if(instance==null){
			instance=new ScreenManager();
		}
		return instance;
	}
	public void popActivity(){
		Activity activity=activityStack.lastElement();
		if(activity!=null){
			activity.finish();
			activity=null;
		}
	}
	public void popActivity(Activity activity){
		if(activity!=null){
			activity.finish();
			activityStack.remove(activity);
			activity=null;
		}
	}
	public Activity currentActivity(){
		Activity activity=activityStack.lastElement();
		return activity;
	}
	public void pushActivity(Activity activity){
		if(activityStack==null){
			activityStack=new Stack<Activity>();
		}
		activityStack.add(activity);
	}
	
	public void popAllActivityExceptOne(Class cls){
		while(true){
			Activity activity=currentActivity();
			if(activity==null){
				break;
			}
			if(activity.getClass().equals(cls) ){
				break;
			}
			popActivity(activity);
		}
	}
}

 

分享到:
评论
3 楼 yangwei0915 2012-02-15  
aaa_star 写道
不必如此,在启动activity时,设置intent标记,可以清除某个activity之上的activity



是的,可用设置intent标记,但是前提是必须要启动一个Activity,但是有时候不需要启动一个Activity
2 楼 aaa_star 2011-12-19  
不必如此,在启动activity时,设置intent标记,可以清除某个activity之上的activity
1 楼 yzhong_sa 2010-06-10  
兄台  activity.finish();   调用之后有没有试过activity并没有回调onDestory()。?

相关推荐

    随意调节你的activity的大小,activity 自定义窗口大小

    默认情况下,Activity会全屏显示,但我们可以通过修改Activity的属性和使用自定义布局来改变这一行为。 1. 修改Activity的属性: 在AndroidManifest.xml中,可以为特定Activity添加`android:resizeableActivity=...

    stack(栈)在android 中的运用

    在Android中,系统默认使用一个Activity栈来管理所有的Activity实例,而我们也可以自定义自己的Activity栈来满足特定的业务需求。 1. **Activity栈的基本概念** - Activity是Android应用中的一个重要组件,它代表...

    Activity栈的简单应用.rar

    4. **Activity栈的管理**:Android系统默认使用主任务栈来管理所有启动的Activity。通过FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TOP等FLAG,可以控制Activity如何进入和退出栈,比如清除栈中所有Activity,...

    利用Theme自定义Activity间的切换动画

    总结来说,自定义Activity间的切换动画需要创建动画资源文件,定义新的Theme,并在AndroidManifest.xml中应用这个Theme。通过这种方式,开发者可以轻松实现个性化的视觉效果,提升应用的用户体验。在实际开发中,还...

    Android自定义日期选择器源码

    这篇内容将深入探讨如何在Android中创建一个自定义日期选择器,并通过源码分析来增强我们的理解。 首先,我们要明白自定义日期选择器的基本结构。通常,它会包含一个日历视图,让用户可以选择年、月、日,有时还...

    android 使用activity自定义下拉选择列表

    在Android中,我们可以使用Spinner组件来实现类似的功能,但为了实现自定义的样式和行为,我们需要自己构建一个PopupWindow。PopupWindow允许我们在屏幕上的任意位置显示一个浮动窗口,非常适合用来模拟下拉列表的...

    Android使用Activity用作弹出式对话框

    通过这种方式,我们可以使用`Activity`来创建弹出式对话框,提供更多的自定义和交互性。但是要注意,过度使用这种方法可能会导致应用程序过于复杂,影响性能。在能够使用`Dialog`或`AlertDialog`的情况下,应优先...

    自定义Activity跳转

    主要用于Activity之间的界面跳转操作,方便统一界面跳转逻辑

    android 自定义dialog和activity跳转的样式

    自定义Dialog可以使应用程序在提示用户信息或者进行选择时,展现出更符合应用风格的界面,而自定义Activity跳转样式则能使得页面间的过渡更加流畅自然。下面将详细介绍这两个方面的实现方法。 首先,我们来探讨如何...

    自定义Activity标题栏(增加关闭和隐藏Activity的按钮)

    在Android开发中,为了提高用户体验并使应用界面更加个性化,开发者经常会遇到自定义Activity标题栏的需求。本文将详细介绍如何通过自定义标题栏来添加关闭与隐藏Activity的功能,并实现类似Windows浏览器上的关闭与...

    android 自定义相机 自定义照相机Activity

    本文将深入探讨如何在Android中实现自定义相机,并基于`Activity`进行详细讲解。 首先,我们需要理解Android的相机框架。Android提供了一个Camera API(已废弃)和Camera2 API,以及更高级的CameraX库。对于自定义...

    android 理解和使用自定义权限

    本文将深入探讨如何理解和使用自定义权限,以便在Android应用开发中更好地进行权限管理。 首先,理解Android权限系统的基础。在Android中,权限分为两种类型:正常权限(Normal Permissions)和危险权限(Dangerous...

    Android自定义相机——身份证扫描界面

    综上所述,创建一个Android自定义相机身份证扫描界面涉及多个步骤,包括权限管理、相机API的使用、自定义布局设计、手势识别、图像处理等技术。通过对这些知识点的掌握和实践,你可以为用户提供一个高效且准确的...

    Android通过自定义Activity实现悬浮的Dialog详解

    自定义activity也是可以的,今天我就介绍一下activity的实现方法。下面来看看详细的介绍: 效果图 如图可以看出,当前的窗体,第一眼其实和dialog没有什么区别,但是它是自定义activity实现。如何实现的呢? 代码...

    android自定义标题栏

    通常,你需要在Activity的`onCreate()`方法中设置这个自定义View,并将其作为ActionBar或Toolbar使用。 4. 添加功能:根据需求,为自定义标题栏添加点击事件、动画效果或其他交互功能。例如,你可以监听返回按钮的...

    android各组件详解-activity

    1. **Activity栈**:Android使用栈式结构管理Activity。当新的Activity启动时,它会被压入栈顶;当Activity关闭时,则从栈中弹出。栈顶的Activity是当前可见且活跃的。 2. **Activity状态**: - **Active**:当...

    Android 一次启动多个Activity (TaskStackBuilder)

    在实际开发中,开发者可以根据需求调整TaskStackBuilder的使用方式,如添加更多的中间Activity,或者自定义回退栈的行为。了解并熟练掌握TaskStackBuilder,对于构建高效、用户友好的Android应用至关重要。

    android 自定义AlertDialog 与Activity相互传递数据

    1、从Activity的TextView中获取字符串设置到AlertDialog的TextView和EditText中 2、将AlertDialog的EditText中的值设置到Activity的TextView中 新手在自定义AlertDialog上的疑问笔者猜测主要有两个: 1、自定义的...

    Android 悬浮Activity ( Dialog风格)

    总的来说,"Android悬浮Activity ( Dialog风格)"是通过自定义Activity样式和窗口属性来实现的一种交互方式。开发者可以通过这种方式创建轻量级的、易于访问的小部件,提高用户体验。同时,结合`CameraDemo`,我们...

    Android基础系列的Activity

    理解和熟练掌握Activity的生命周期、Intent的使用、Activity间的通信、栈管理、多窗口支持、Activity过渡动画以及配置变化处理,是Android开发者的基本功。通过深入学习和实践,可以创建出更加高效、用户友好的应用...

Global site tag (gtag.js) - Google Analytics