Android开发Activity管理工具类的操作方法

 更新时间:2025年04月01日 16:51:36   作者:浩宇软件开发  
这篇文章主要介绍了Android开发Activity管理工具类,下面是一个完整的Activity管理工具类实现,可以帮助你管理应用中的所有Activity,方便一键退出应用、获取当前Activity等操作,需要的朋友可以参考下

1. 问题描述

在Android开发过程中,从A页面跳转到B页面(不要在A页面调用finish()),如果在B页面调用System.exit(0)方法,并不能退出app,而是又重新启动app。原因是从A页面跳转到B页面的时候,没有把A销毁掉,从而导致app被重启,所以需要对Activity进行管理起来

2. Activity管理工具类 (Java实现)

下面是一个完整的Activity管理工具类实现,可以帮助你管理应用中的所有Activity,方便一键退出应用、获取当前Activity等操作。

/**
 * Activity管理工具类
 */
public class ActivityManager {
    private static ActivityManager instance;
    private Stack<Activity> activityStack; // Activity栈
    private ActivityManager() {
    }
    /**
     * 单例模式
     */
    public static ActivityManager getInstance() {
        if (instance == null) {
            synchronized (ActivityManager.class) {
                if (instance == null) {
                    instance = new ActivityManager();
                }
            }
        }
        return instance;
    }
    /**
     * 添加Activity到堆栈
     */
    public void addActivity(Activity activity) {
        if (activityStack == null) {
            activityStack = new Stack<>();
        }
        activityStack.add(activity);
    }
    /**
     * 获取当前Activity(堆栈中最后一个压入的)
     */
    public Activity currentActivity() {
        if (activityStack == null || activityStack.isEmpty()) {
            return null;
        }
        return activityStack.lastElement();
    }
    /**
     * 结束当前Activity(堆栈中最后一个压入的)
     */
    public void finishActivity() {
        if (activityStack == null || activityStack.isEmpty()) {
            return;
        }
        Activity activity = activityStack.lastElement();
        finishActivity(activity);
    }
    /**
     * 结束指定的Activity
     */
    public void finishActivity(Activity activity) {
        if (activity != null && !activity.isFinishing()) {
            activityStack.remove(activity);
            activity.finish();
        }
    }
    /**
     * 结束指定类名的Activity
     */
    public void finishActivity(Class<?> cls) {
        for (Activity activity : activityStack) {
            if (activity.getClass().equals(cls)) {
                finishActivity(activity);
                break;
            }
        }
    }
    /**
     * 结束所有Activity
     */
    public void finishAllActivity() {
        if (activityStack == null) return;
        for (Activity activity : activityStack) {
            if (activity != null && !activity.isFinishing()) {
                activity.finish();
            }
        }
        activityStack.clear();
    }
    /**
     * 退出应用程序
     */
    public void exitApp() {
        try {
            finishAllActivity();
            // 退出JVM,释放所有内存
            System.exit(0);
            // 杀死该应用进程
            android.os.Process.killProcess(android.os.Process.myPid());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取指定类名的Activity
     */
    public Activity getActivity(Class<?> cls) {
        if (activityStack == null) return null;
        for (Activity activity : activityStack) {
            if (activity.getClass().equals(cls)) {
                return activity;
            }
        }
        return null;
    }
    /**
     * 移除Activity(但不finish)
     */
    public void removeActivity(Activity activity) {
        if (activity != null && activityStack != null) {
            activityStack.remove(activity);
        }
    }
    /**
     * 返回栈中Activity的数量
     */
    public int getActivityCount() {
        return activityStack == null ? 0 : activityStack.size();
    }
}

3. 使用说明

初始化:在BaseActivity或每个Activity的onCreate()方法中调用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityManager.getInstance().addActivity(this);
}

在Activity销毁时移除:在onDestroy()方法中调用:

@Override
protected void onDestroy() {
    super.onDestroy();
    ActivityManager.getInstance().removeActivity(this);
}

常用方法示例:

// 获取当前Activity
Activity currentActivity = ActivityManager.getInstance().currentActivity();
// 结束当前Activity
ActivityManager.getInstance().finishActivity();
// 结束指定Activity
ActivityManager.getInstance().finishActivity(MainActivity.class);
// 退出应用程序
ActivityManager.getInstance().exitApp();
// 结束所有Activity但不退出应用
ActivityManager.getInstance().finishAllActivity();

4. 注意事项

  • 需要在每个Activity的生命周期中正确添加和移除Activity
  • 退出应用时建议使用exitApp()方法,它会清理所有Activity并退出进程
  • 这个工具类使用了单例模式,确保全局只有一个实例管理所有Activity

到此这篇关于Android开发Activity管理工具类的文章就介绍到这了,更多相关Android Activity管理工具类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java某个经纬度是否在genjson文件中问题

    Java某个经纬度是否在genjson文件中问题

    GeoJSON是一种用于地理空间信息数据交换的格式,基于JSON,要判断某个经纬度是否在某个区域内,首先需要解析GeoJSON文件,确定区域边界,然后使用经纬度进行比较
    2024-11-11
  • SpringBoot查看项目配置信息的几种常见方法

    SpringBoot查看项目配置信息的几种常见方法

    这篇文章主要为大家详细介绍了查看Spring Boot项目所有配置信息的几种方法,包括 Actuator端点,日志输出,代码级获取等方式并附带详细步骤和示例,希望对大家有一定的帮助
    2025-04-04
  • java 二分法算法的实例

    java 二分法算法的实例

    这篇文章主要介绍了java 二分法算法的实例的相关资料,希望通过本文大家能够掌握二分法,需要的朋友可以参考下
    2017-09-09
  • java中文乱码之解决URL中文乱码问题的方法

    java中文乱码之解决URL中文乱码问题的方法

    这篇文章主要为大家分享了介绍了java中文乱码之解决URL中文乱码问题的方法,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • springBoot启动时让方法自动执行的几种实现方式

    springBoot启动时让方法自动执行的几种实现方式

    这篇文章主要介绍了springBoot启动时让方法自动执行的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java实现网络数据提取所需知识点

    Java实现网络数据提取所需知识点

    这篇文章主要介绍了Java实现网络数据提取所需知识点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 详解JAVA常用的时间操作【实用】

    详解JAVA常用的时间操作【实用】

    本文主要介绍了JAVA一些常用的时间操作,很实用,相信大家在开发项目时会用到,下面就跟小编一起来看下吧
    2016-12-12
  • Java中常用修饰符的使用方法汇总

    Java中常用修饰符的使用方法汇总

    下面小编就为大家带来一篇Java中常用修饰符的使用方法汇总。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • RocketMQ producer发送者浅析

    RocketMQ producer发送者浅析

    RocketMQ生产者是一种高性能、可靠的消息发送者,能够将消息快速、可靠地发送到RocketMQ消息队列中。它具有多种消息发送模式和消息发送方式,可以根据不同的业务需求进行灵活配置
    2023-04-04
  • Java AbstractMethodError原因案例详解

    Java AbstractMethodError原因案例详解

    这篇文章主要介绍了Java AbstractMethodError原因案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论