diff --git a/service/src/main/java/com/github/kr328/clash/service/ClashCore.kt b/service/src/main/java/com/github/kr328/clash/service/ClashCore.kt index e13c789..5e7d7c5 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ClashCore.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ClashCore.kt @@ -17,6 +17,10 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.selects.select class ClashCore(private val service: Service) : CoroutineScope by MainScope() { + companion object { + private const val CALL_GC_PERIOD = 300 + } + private var stopReason: String? = null private val settings = ServiceSettings(service) private val database = ClashDatabase.getInstance(service) @@ -68,6 +72,7 @@ class ClashCore(private val service: Service) : CoroutineScope by MainScope() { launch { val ticker = Channel() + var refreshCount = 0 var enableRefresh = settings.get(ServiceSettings.NOTIFICATION_REFRESH) && service.getSystemService()!!.isInteractive @@ -92,6 +97,13 @@ class ClashCore(private val service: Service) : CoroutineScope by MainScope() { if (enableRefresh) { ticker.onReceive { notification.update() + + refreshCount++ + + if ( refreshCount > CALL_GC_PERIOD ) { + refreshCount = 0 + System.gc() + } } } }