Android 安卓栈管理Activity工具以及使用方法
Posted 第三女神程忆难
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 安卓栈管理Activity工具以及使用方法相关的知识,希望对你有一定的参考价值。
引导
安卓开发中不可缺的,可以在Application初始化的时候建立,也可以创建一个单例来管理,下面是创建了单例模式的类来管理,给出了几个常用的,可以根据自己的业务需求再添加,注释有详细标明!
使用方法
在项目 BaseActivity 中 onCreate 方法中调用 addActivity 方法
在项目 BaseActivity 中 finish 方法中调用 removeActivity 方法
其余的方法应该在业务中调用,比如:
- 在输入完账号密码后登录进入首页后,调用 finishBeForActivity 方法来关闭首页之前的页面
- 在退出登录操作时候又要回到登录页,此时在登录页调用 finishBeForActivity 方法来关闭之前的页面
- …(不再举例)
使用案例:
//根据类名关闭指定的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 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(代码片