`

在Android项目中手动管理你的Activity

阅读更多
我们通常会使用系统自带的ActivityManager,但是在有些情况下使用起来不是太简洁。所以会自己来维护一个栈来管理这些activtiy

代码如下:

import java.util.Stack;

import android.app.Activity;
import android.util.Log;

public class ScreenManager
{
    private static final String TAG = "ScreenManager";
    private static Stack<Activity> activityStack;
    
    private static ScreenManager instance;
    
    /**
     * <单例方法>
     * <功能详细描述>
     * @return 该对象的实例
     * @see [类、类#方法、类#成员]
     */
    public static ScreenManager getScreenManager1()
    {
        if (instance == null)
        {
            instance = new ScreenManager();
        }
        return instance;
    }
    
    /**
     * <获取当前栈顶Activity>
     * <功能详细描述>
     * @return
     * @see [类、类#方法、类#成员]
     */
    public Activity currentActivity()
    {
        if (activityStack == null || activityStack.size() == 0)
        {
            return null;
        }
        Activity activity = activityStack.lastElement();
        
        Log.e(TAG, "get current activity:" + activity.getClass().getSimpleName());
        return activity;
    }
    
    /**
     * <将Activity入栈>
     * <功能详细描述>
     * @param activity
     * @see [类、类#方法、类#成员]
     */
    public void pushActivity(Activity activity)
    {
        if (activityStack == null)
        {
            activityStack = new Stack<Activity>();
        }
        Log.e(TAG, "push stack activity:" + activity.getClass().getSimpleName());
        activityStack.add(activity);
    }
    
    /**
     * <退出栈顶Activity>
     * <功能详细描述>
     * @param activity
     * @see [类、类#方法、类#成员]
     */
    public void popActivity(Activity activity)
    {
        if (activity != null)
        {
            activity.finish();
            Log.e(TAG, "remove current activity:" + activity.getClass().getSimpleName());
            activityStack.remove(activity);
            activity = null;
        }
    }
    
    /**
     * <退出栈中所有Activity,当前的activity除外>
     * <功能详细描述>
     * @param cls
     * @see [类、类#方法、类#成员]
     */
    public void popAllActivityExceptMain(Class cls)
    {
        while(true)
        {
            Activity activity = currentActivity();
            if (activity == null)
            {
                break;
            }
            if (activity.getClass().equals(cls))
            {
                break;
            }
            
            popActivity(activity);
        }
    }
}



具体使用:
 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        
        super.onCreate(savedInstanceState);
        
        ActivityManager am =  (ActivityManager)getSystemService("");
        am.
        ScreenManager.getScreenManager().pushActivity(this);
    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        ScreenManager.getScreenManager().popActivity(this);
    }


    /**
     * <退出系统>
     * <绑定退出按钮>
     * @param v
     * @see [类、类#方法、类#成员]
     */
    public void exitSystem(View v)
    {
        ScreenManager.getScreenManager().popAllActivityExceptMain(getClass());
        
        finish();
    }
分享到:
评论

相关推荐

    基于Android的学生信息管理系统

    总的来说,这个系统难度不大,但是安卓的项目本来就少,这个项目耶包含了基本的增删改查,并且能实现后台与App的交互,所以这一个星期中还是学了很多东西的,如Android的Fagment、Activity、手动实现分页、HTTP请求...

    Android自主学习项目报告(一).doc

    不要在让transactions在其他的Activity生命周期函数提交,如onActivi tyResult()、onStart()和onResume() 自己在学习过程中总结的知识点 (3)Android体系结构和Android项目目录 Android是基于Linux内核的软件平台和...

    android手势及activity切换动画效果

    android下手势的识别和activity之间切换时的动画效果

    Android-仿微信滑动销毁activity获取view绘制区域

    仿微信滑动销毁activity ,获取view绘制区域

    android中手动处理屏幕旋转问题

    在开发Android应用的过程中,我们都会遇到屏幕旋转的情况。 在旋转的过程中,默认会将Activity销毁,然后再重新创建, 这会严重影响应用的性能。 如果没有自行修改的话,在配置变化时,Android会结束当前 的Activity...

    Android Activity生命周期演示程序

    演示了3个Activity在相互转换中的生命周期及事件。 其中Tag time是为了手动分割Log的现实,方便查看阶段性的信息。 安装到手机上需要打开USB调试模式。

    MyActivity

    所以Google的工程师在Android平台构架设计上,将很多组件都设计成基于事件驱动的,不推荐开发者采用手动的方式去主动调用它们的行为,这些行为将全部交给系统进行统一管理。因此掌握它们的生命周期是学好它们的根本...

    测试Activity状态保存和恢复

    用于测试Activity创建和销毁时,Activity状态的保存和销毁

    Android Activity 生命周期演示工具

    演示了3个Activity在相互转换中的生命周期及事件。 其中Tag time是为了手动分割Log的现实,方便查看阶段性的信息。 安装到手机上需要打开USB调试模式。

    Android 手动连接wifi的源码

    这是一个用来连接到 WIFI 热点的库。 简单实用方法: 1 final Intent intent = new Intent("com.farproc.wifi.connecter.action.CONNECT_OR_EDIT"); 2 intent.putExtra(... ...startActivity(intent);

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    Android中获取后台正在运行的应用列表

    在Android设备中,按Back键会将当前的Activity出栈销毁,而按HOME键却会将之隐藏到后台。如若有多个这样的程序这样操作,我们不知道后台到底有多少个正在运行的应用程序。此程序的目的就列举出后台正在运行的应用...

    Android插件

    1.GsonFormat(GsonFormat) 快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。...可用于将项目中的 string 资源自动翻译为其他语言的 Android Studio/IntelliJ IDEA 插件

    ARouter使用自定义注解处理器,自动生成跳转Activity的代码,避免手动填写和管理path

    ARouter使用自定义注解处理器,自动生成跳转Activity的代码,避免手动填写和管理path 文章地址:https://blog.csdn.net/guangdeshishe/article/details/126195119

    Android项目源码超低耦合框架全自动注入自动分发框架.rar

    我是做外包的,初衷是在不影响项目质量的前提下减少我的工作量,而且BUG其他人改起来相对比较容易,本工具专属外包码农,如果你想做精细,很在意性能数据,请看看就好。 1、基本功能 InLayer注解 InPlayer 注解 ...

    Android项目源码开源的 Material Design 豆瓣客户端.zip

    Android 默认在冷启动应用进程至能够调用 Activity.onCreate() 前会加载应用主题中的背景作为预览,而默认背景是白色,与应用在上部拥有绿色 AppBar 的效果不相匹配。 为了生成适应于不同屏幕大小、系统版本的图片...

    Android代码-XiaomiPJ

    最近做项目遇到小米手机比较人(zhuang)性(bi)化的悬浮窗权限,当在小米手机上安装完应用后默认是关闭这个权限的,需要用户手动到应用详情页打开该权限。 重(keng)要(die)的是使用这个权限开关系统window后, 小米...

    Android帮助文档及一些资料打包放送

    [Android]手动触发OnClick事件 - 农民伯伯 - 博客园.mht357.93 KB [Android]文本框实现搜索和清空效果 - 农民伯伯 - 博客园.mht380.75 KB 新浪微博布局学习——活用RelativeLayout - 农民伯伯 - 博客园.mht453.32 KB...

    Android代码-XRichText

    XRichText 一个Android富文本类库,支持图文混排,支持编辑和预览,支持插入和删除图片。 实现的原理: ...V1.4版本开放了编辑笔记时的删除图片接口,请自己在Activity中设置OnRtDeleteImageListener接口。 V

    android中Activity横竖屏切换的那些事

    手动设置屏幕:我们自己去调用Activity的 setRequestedOrientation 方法。 设置屏幕的方向 简介 值 描述 unspecified 默认值。系统自动选择屏幕方向 behind 跟activity堆栈中的下面一个activity的方向一致...

Global site tag (gtag.js) - Google Analytics