ActivityManager.kt 2.59 KB
Newer Older
1
package com.ydl.ydlcommon.utils
konghaorui committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109

import android.app.Activity

/**
 * activity 管理类
 * author : Zhangwenchao
 * e-mail : zhangwch@yidianling.com
 * time   : 2018/02/05
 */
class ActivityManager {

    companion object {
        fun getInstance(): ActivityManager {
            return Holder.INSTANCE
        }

        fun getActivitySize(): Int {
            return getInstance().activates.size
        }

        fun finishAll() {
            for(a in getInstance().activates) {
                a.finish()
            }
            getInstance().activates.clear()
        }

        fun finishActivity(activity: Activity) {
            if (getInstance().activates.contains(activity)) {
                getInstance().activates.remove(activity)
                activity.finish()
            }
        }

        /**
         * 关闭除当前activity外的所有activity
         */
        fun finishOtherActivity(activity: Activity) {

            for (act in getInstance().activates){
                if (act == activity)continue
                act.finish()
            }
        }

        fun finishActivity(cls: Class<*>) {
            getInstance().activates
                    .filter { it::class.java == cls }
                    .forEach { finishActivity(it) }
        }
    }

    private val activates: MutableList<Activity> by lazy {
        ArrayList<Activity>()
    }

    // 添加到栈中
     fun addStack(activity: Activity) {
        activates.add(activity)
    }

    // 从栈中移除
    internal fun removeStack(activity: Activity) {
        if (activates.contains(activity)) {
            activates.remove(activity)
        }
    }

    fun getTopTaskActivity(): Activity {
        return activates[activates.size - 1]
    }

    fun getSecondTaskActivity(): Activity? {
        return if (activates.size <= 1) {
            null
        } else {
            activates[activates.size - 2]
        }
    }

    fun finishTopActivity(num: Int) {
        if (activates.isEmpty()) {
            return
        }
        val size = Math.min(num, activates.size)
        (0 until size).forEach { activates[it].finish() }
    }

    fun finishActivity(activity: Activity) {
        if (activates.contains(activity)) {
            activates.remove(activity)
            activity.finish()
        }
    }

    fun getActivitys(): MutableList<Activity> {
        return activates
    }

    fun finishActivity(cls: Class<out Activity>) {
        activates.filter { it::class.java == cls }
                .forEach { finishActivity(it) }
    }

    private object Holder {
        internal val INSTANCE = ActivityManager()
    }
}