Android 安卓栈管理Activity工具以及使用方法

引导

安卓开发中不可缺的,可以在Application初始化的时候建立,也可以创建一个单例来管理,下面是创建了单例模式的类来管理,给出了几个常用的,可以根据自己的业务需求再添加,注释有详细标明!


使用方法

在项目 BaseActivityonCreate 方法中调用 addActivity 方法
在项目 BaseActivityfinish 方法中调用 removeActivity 方法

其余的方法应该在业务中调用,比如:

  1. 在输入完账号密码后登录进入首页后,调用 finishBeForActivity 方法来关闭首页之前的页面
  2. 在退出登录操作时候又要回到登录页,此时在登录页调用 finishBeForActivity 方法来关闭之前的页面
  3. …(不再举例)

使用案例:

//根据类名关闭指定的Activity
ActivityManager.get().finishActivity("MainActivity")
ActivityManager.get().finishActivity("MainActivity", "MainActivity")
ActivityManager.get().finishActivity("MainActivity", "MainActivity", "MainActivity")

//关闭指定的Activity
ActivityManager.get().finishActivity(this)
ActivityManager.get().finishActivity(this, this)
ActivityManager.get().finishActivity(this, this, this)

//关闭所有Activity
ActivityManager.get().finishAllActivity()

//关闭某Activity之前所有的Activity, 一般触发登录或切换账号操作才会使用
ActivityManager.get().finishBeForActivity(this)

/**
 * 栈管理Activity
 *
 * @author: Cyn
 * @date: 2021/7/16
 */
@Suppress("NAME_SHADOWING")
class ActivityManager private constructor() {

    companion object {

        private var activityTaskList: MutableList<Activity>? = null

        private var instance: ActivityManager? = null
            get() {
                if (null == field) {
                    field = ActivityManager()
                    activityTaskList = mutableListOf()
                }
                return field
            }

        @Synchronized
        fun get(): ActivityManager {
            return instance!!
        }
    }

    /**
     * 添加一个Activity
     */
    fun addActivity(activity: Activity) {
        activityTaskList?.add(activity)
    }


    /**
     * 删除某个Activity
     */
    fun removeActivity(activity: Activity? = null) {
        if (null != activity) {
            activityTaskList?.remove(activity)
        }
    }

    /**
     * 关闭指定 Activity
     *
     * @param activity 指定要关闭的 Activity
     */
    fun finishActivity(vararg activity: Activity) {
        activityTaskList?.let {
            for (i in activity.indices) {
                for (j in 0 until it.size) {
                    if (it == activity[i]) {
                        when (it[j]) {
                            is BaseActivity -> (it[j] as BaseActivity).finish()
                            else -> it[j].finish()
                        }
                    }
                }
            }
        }
    }

    /**
     * 根据类名关闭指定Activity
     * 一般调用BaseActivity中的finish方法即可,留作备用
     *
     * @param activityName 指定要关闭的 Activity 类名字
     */
    fun finishActivity(vararg activityName: String) {
        activityTaskList?.let {
            for (i in activityName.indices) {
                for (j in 0 until it.size) {
                    if (it[j].javaClass.name.contains(activityName[i])) {
                        when (it[j]) {
                            is BaseActivity -> (it[j] as BaseActivity).finish()
                            else -> it[j].finish()
                        }
                    }
                }
            }
        }
    }

    /**
     * 关闭所有Activity
     */
    fun finishAllActivity() {
        activityTaskList?.let {
            for (i in 0 until it.size) {
                when (it[i]) {
                    is BaseActivity -> (it[i] as BaseActivity).finish()
                    else -> it[i].finish()
                }
            }

            it.clear()
        }
    }

    /**
     * 关闭某Activity之前的Activity
     * 一般触发登录或切换账号操作才会使用
     */
    fun finishBeForActivity(activity: Activity? = null) {
        if (null != activity) {
            activityTaskList?.let {

                val tempActivityList = mutableListOf<Activity>()

                //找出某Activity之前的所有Activity
                for (i in 0 until it.size) {
                    if (activity == it[i]) {
                        break
                    } else {
                        tempActivityList.add(it[i])
                    }
                }

                //循环关闭Activity
                for (j in 0 until tempActivityList.size) {
                    when (tempActivityList[j]) {
                        is BaseActivity -> (tempActivityList[j] as BaseActivity).finish()
                        else -> tempActivityList[j].finish()
                    }
                }

                //有始有终
                tempActivityList.clear()

            }
        }
    }
}



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第三女神程忆难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值