This commit is contained in:
HapeLee committed 2025-06-04 13:33:51 +08:00
1 parent b86d90021c
commit 6c0757c91b
972 files changed
+6885 -7321

No files matched your search

@@ -0,0 +1,121 @@
package io.legato.kazusa.help
import android.app.Activity
import android.app.Application
import android.os.Bundle
import io.legato.kazusa.base.BaseService
import io.legato.kazusa.utils.LogUtils
import java.lang.ref.WeakReference
/**
* Activity管理器,管理项目中Activity的状态
*/
@Suppress("unused")
object LifecycleHelp : Application.ActivityLifecycleCallbacks {
private const val TAG = "LifecycleHelp"
private val activities: MutableList<WeakReference<Activity>> = arrayListOf()
private val services: MutableList<WeakReference<BaseService>> = arrayListOf()
private var appFinishedListener: (() -> Unit)? = null
fun activitySize(): Int {
return activities.size
}
/**
* 判断指定Activity是否存在
*/
fun isExistActivity(activityClass: Class<*>): Boolean {
activities.forEach { item ->
if (item.get()?.javaClass == activityClass) {
return true
}
}
return false
}
/**
* 关闭指定 activity(class)
*/
fun finishActivity(vararg activityClasses: Class<*>) {
val waitFinish = ArrayList<WeakReference<Activity>>()
for (temp in activities) {
for (activityClass in activityClasses) {
if (temp.get()?.javaClass == activityClass) {
waitFinish.add(temp)
break
}
}
}
waitFinish.forEach {
it.get()?.finish()
}
}
fun setOnAppFinishedListener(appFinishedListener: (() -> Unit)) {
this.appFinishedListener = appFinishedListener
}
override fun onActivityPaused(activity: Activity) {
LogUtils.d(TAG, "${activity::class.simpleName} onPause")
}
override fun onActivityResumed(activity: Activity) {
LogUtils.d(TAG, "${activity::class.simpleName} onResume")
}
override fun onActivityStarted(activity: Activity) {
LogUtils.d(TAG, "${activity::class.simpleName} onStart")
}
override fun onActivityDestroyed(activity: Activity) {
LogUtils.d(TAG, "${activity::class.simpleName} onDestroy")
for (temp in activities) {
if (temp.get() != null && temp.get() === activity) {
activities.remove(temp)
if (services.size == 0 && activities.size == 0) {
onAppFinished()
}
break
}
}
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
LogUtils.d(TAG, "${activity::class.simpleName} onSaveInstanceState")
}
override fun onActivityStopped(activity: Activity) {
LogUtils.d(TAG, "${activity::class.simpleName} onStop")
}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
LogUtils.d(TAG, "${activity::class.simpleName} onCreate")
activities.add(WeakReference(activity))
}
@Synchronized
fun onServiceCreate(service: BaseService) {
LogUtils.d(TAG, "${service::class.simpleName} onCreate")
services.add(WeakReference(service))
}
@Synchronized
fun onServiceDestroy(service: BaseService) {
LogUtils.d(TAG, "${service::class.simpleName} onDestroy")
for (temp in services) {
if (temp.get() != null && temp.get() === service) {
services.remove(temp)
if (services.size == 0 && activities.size == 0) {
onAppFinished()
}
break
}
}
}
private fun onAppFinished() {
appFinishedListener?.invoke()
}
}