mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2024-09-29 08:20:51 +00:00
Solving one of the OutOfMemory erros (too many translators instantiated at the same time)
This commit is contained in:
parent
893b88246e
commit
3321448dd2
@ -0,0 +1,5 @@
|
||||
package com.vitorpamplona.amethyst.service.lang
|
||||
|
||||
object LanguageTranslatorService {
|
||||
fun clear() {}
|
||||
}
|
@ -5,7 +5,6 @@ import android.os.StrictMode
|
||||
import android.os.StrictMode.ThreadPolicy
|
||||
import android.os.StrictMode.VmPolicy
|
||||
import android.util.Log
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
import coil.ImageLoader
|
||||
import com.vitorpamplona.amethyst.service.playback.VideoCache
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -13,7 +12,7 @@ import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.time.measureTimedValue
|
||||
|
||||
@UnstableApi class Amethyst : Application() {
|
||||
class Amethyst : Application() {
|
||||
val videoCache: VideoCache by lazy {
|
||||
val newCache = VideoCache()
|
||||
newCache.initFileCache(instance)
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.vitorpamplona.amethyst.service.playback
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
import androidx.media3.database.StandaloneDatabaseProvider
|
||||
import androidx.media3.datasource.cache.CacheDataSource
|
||||
import androidx.media3.datasource.cache.LeastRecentlyUsedCacheEvictor
|
||||
@ -10,7 +10,8 @@ import androidx.media3.datasource.okhttp.OkHttpDataSource
|
||||
import okhttp3.OkHttpClient
|
||||
import java.io.File
|
||||
|
||||
@UnstableApi class VideoCache {
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
class VideoCache {
|
||||
|
||||
var exoPlayerCacheSize: Long = 150 * 1024 * 1024 // 90MB
|
||||
|
||||
|
@ -23,6 +23,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.vitorpamplona.amethyst.LocalPreferences
|
||||
import com.vitorpamplona.amethyst.ServiceManager
|
||||
import com.vitorpamplona.amethyst.service.ExternalSignerUtils
|
||||
import com.vitorpamplona.amethyst.service.lang.LanguageTranslatorService
|
||||
import com.vitorpamplona.amethyst.service.notifications.PushNotificationUtils
|
||||
import com.vitorpamplona.amethyst.ui.components.DefaultMutedSetting
|
||||
import com.vitorpamplona.amethyst.ui.components.keepPlayingMutex
|
||||
@ -104,7 +105,9 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
LanguageTranslatorService.clear()
|
||||
ServiceManager.cleanObservers()
|
||||
|
||||
// if (BuildConfig.DEBUG) {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
debugState(this@MainActivity)
|
||||
|
@ -24,7 +24,7 @@ data class ResultOrError(
|
||||
)
|
||||
|
||||
object LanguageTranslatorService {
|
||||
var executorService = Executors.newScheduledThreadPool(5)
|
||||
var executorService = Executors.newScheduledThreadPool(3)
|
||||
|
||||
private val options = LanguageIdentificationOptions.Builder().setExecutor(executorService).setConfidenceThreshold(0.6f).build()
|
||||
private val languageIdentification = LanguageIdentification.getClient(options)
|
||||
@ -32,7 +32,7 @@ object LanguageTranslatorService {
|
||||
val tagRegex = Pattern.compile("(nostr:)?@?(nsec1|npub1|nevent1|naddr1|note1|nprofile1|nrelay1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)", Pattern.CASE_INSENSITIVE)
|
||||
|
||||
private val translators =
|
||||
object : LruCache<TranslatorOptions, Translator>(20) {
|
||||
object : LruCache<TranslatorOptions, Translator>(3) {
|
||||
override fun create(options: TranslatorOptions): Translator {
|
||||
return Translation.getClient(options)
|
||||
}
|
||||
@ -47,6 +47,10 @@ object LanguageTranslatorService {
|
||||
}
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
translators.evictAll()
|
||||
}
|
||||
|
||||
fun identifyLanguage(text: String): Task<String> {
|
||||
return languageIdentification.identifyLanguage(text)
|
||||
}
|
||||
@ -61,6 +65,7 @@ object LanguageTranslatorService {
|
||||
}
|
||||
|
||||
val options = TranslatorOptions.Builder()
|
||||
.setExecutor(executorService)
|
||||
.setSourceLanguage(sourceLangCode)
|
||||
.setTargetLanguage(targetLangCode)
|
||||
.build()
|
||||
@ -116,7 +121,7 @@ object LanguageTranslatorService {
|
||||
val short = "A$counter"
|
||||
counter++
|
||||
returningList.put(short, tag)
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
}
|
||||
return returningList
|
||||
@ -132,7 +137,7 @@ object LanguageTranslatorService {
|
||||
val short = "A$counter"
|
||||
counter++
|
||||
returningList.put(short, lnInvoice)
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
}
|
||||
return returningList
|
||||
|
Loading…
Reference in New Issue
Block a user