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

Posted 第三女神程忆难

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

            
        
    




以上是关于Android 安卓栈管理Activity工具以及使用方法的主要内容,如果未能解决你的问题,请参考以下文章

Android 任务栈

[Android]Activity的生命周期

Android 返回堆栈管理打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(代码片

Android安卓四大组件之Activity

Android Activity的任务栈和四大启动模式

安卓面试题