finish 特定Activity外的其他Activity

15 阅读1分钟

使用

finishUpActivity(XActivity::class.java)

代码

var activities = ConcurrentHashMap<Class<*>, Activity>()

registerActivityLifecycleCallbacks(myActivityLifecycleCb)
unregisterActivityLifecycleCallbacks(myActivityLifecycleCb)

private var myActivityLifecycleCb = object : ActivityLifecycleCallbacks {
    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
        activities[activity.javaClass] = activity
    }

    override fun onActivityStarted(activity: Activity) {
    }

    override fun onActivityResumed(activity: Activity) {
    }

    override fun onActivityPaused(activity: Activity) {
    }

    override fun onActivityStopped(activity: Activity) {
    }

    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
    }

    override fun onActivityDestroyed(activity: Activity) {
        if (activities.contains(activity.javaClass)) {
            Log.e("onActivityDestroyed", "remove ${activity.javaClass}")
            activities.remove(activity.javaClass)
        }
    }
}

private fun finishUpActivity(vararg clazzs: Class<*>?) {
    val cls = listOf(*clazzs)
    val iterator: MutableIterator<Map.Entry<Class<*>, Activity>> = activities.entries.iterator()
    while (iterator.hasNext()) {
        val (key, value) = iterator.next()
        Log.d("finishUpActivity", "next act=$key")
        if (cls.contains(key)) {
            continue
        }
        if (!value.isFinishing) {
            value.finish()
        }
        iterator.remove()
    }
}

注意: