Kotlin 的AppManager管理类

这一阵新到的这个公司两个项目准备开始重构 需要用到 AppManager管理Activity 通过Stack 实现先进先出,后进后出的原则
实现包括:添加Activity到堆栈、获取当前的Activity(堆栈最后一个)、结束当前的Activity(堆栈最后一个)、结束指定的Activity、结束指定类名的Activity、结束所有的Activity等方法。


object AppManager {

    private var mActivities: Stack = Stack()

    /**
     * 添加Activity到堆栈
     */
    fun attach(activity: Activity) {
        mActivities.add(activity)
    }

    /**
     * 将指定Activity移除
     */
    fun detach(activity: Activity) {
        mActivities.remove(activity)
    }

    /**
     * Get current activity (the last into Stack)
     */
    fun currentActivity(): Activity {
        return mActivities.lastElement()
    }

    /**
     * Finish current activity (the last into Stack)
     */
    fun finishActivity() {
        val a = mActivities.lastElement()
        a.finish()
    }

    /**
     * Finish the input activity
     */
    fun finishActivity(activity: Activity?) {
        var size = -1
        for (i in mActivities.indices) {
            val a = mActivities[i]
            if (a == activity) {
                size = i
                break
            }
        }
        if (size != -1) {
            mActivities.removeAt(size)
            activity?.finish()
        }
    }

    /**
     * finish the activity of afferent class
     */
    fun finishActivity(cls: Class<*>) {
        for (i in mActivities.indices) {
            val a = mActivities[i]
            if (a.javaClass.canonicalName == cls.canonicalName) {
                mActivities.removeAt(i)
                a.finish()
                break
            }
        }
    }

    /**
     * Judge the input Activity is live or die
     */
    fun isLive(activity: Activity): Boolean {
        return mActivities.contains(activity)
    }

    /**
     * Judge the Activity instance of the input class is live or die
     * (the Activity can have more than one object)
     */
    fun isLive(cls: Class<*>): Boolean {
        mActivities.forEach {
            if (it.javaClass.canonicalName == cls.canonicalName)
                return true
        }
        return false
    }

    /**
     * Finish all activity of th mActivities and make mActivities clear
     */
    fun finishAllActivity() {
        mActivities.forEach {
            it?.finish()
        }
        mActivities.clear()
    }

    /**
     * app exit
     */
    @SuppressLint("MissingPermission")
    fun appExit(context: Context) {
        try {
            finishAllActivity()
            val activityMgr = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
            activityMgr.killBackgroundProcesses(context.packageName)
            System.exit(0)
        } catch (e: Exception) {
        }

    }

}

直接copy下来就可以用了 英文不是很好 不过还在学习中, 注释看看就好

你可能感兴趣的:(Kotlin 的AppManager管理类)