使用
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()
}
}
注意:
- LinkedHashMap不是线程安全的,要使用ConcurrentHashMap,防止出现ConcurrentModificationException异常
- mutableMapOf的实现也是LinkedHashMap
- ConcurrentHashMap是ConcurrentMap的实现类,ConcurrentMap是Map的子接口,是高并发下线程安全的Map集合
- Java多线程——ConcurrentMap、ConcurrentHashMap_concurrenthashmap concurrentmap-CSDN博客
- ConcurrentHashMap的使用场景 - 周文豪 - 博客园 (cnblogs.com)