В моем действии выполняется алгоритм, который может использовать большой объем памяти устройства, как только действие создано, но работает нормально, но когда я продолжаю выходить, нажимаю назад и затем нажимаю, чтобы снова войти в действие, не останавливая много временами кажется, что приложение накапливает память, что я видел в своем профиле и заставляло такое приложение просто сбить мое приложение менее чем за 20 попыток.
Тем не менее, комментируя этот код, я просто смог выйти и вернуться из упражнения так быстро, как только смогу, сколько бы раз я это не делал.
РЕДАКТИРОВАТЬ: Я просто стерла цикл for, проверила его и отлично работает, кажется, что способ, которым я много раз разбиваю большие строки для создания карты, накапливает память, есть способ справиться с этим?
Это мой алгоритм, он на ViewModel, если это имеет значение
fun getAllChartPoint(id: Int){
getTotalPackages(id) { // ROOM CALL returns as integer
myCallRepository.getOrder(id){ // room call to get an object 'CALL'
val odr = SupportVersionHelper.getAdcRateConfigOrDefault(it.adcOdrX!!,it. adcOdrY!!)
myPackgerepository.getAllPackagesWithId(it){ // Another ROOM call, returns a list of objects, that contanis a big string that will be splitted
for (index in 0 until it.size) {
if (it[index].signal != null) {
val splitedPoint = it[index].signal!!.split(" ")
if (isMemoryLow(context)){
return@getFhirPackagesForMonitoringWithId
}
splitedPoint.map { signal ->
signal.toFloatOrNull()?.let { floatSignal ->
map[currIndexMap.toFloat()] = floatSignal
currIndexMap++
}
}
}
}
}
}
}
}
Все вызовы Room добавляются в CompositeSubscription (), которые очищаются методом onCleared () ViewModel
fun getNumberPackages(monitoringId: Long, onCompletion: (Int) -> Unit, onFail: (Throwable) -> Unit){
val subscription = Single.fromCallable { fhirPackageDao?.numberOfFhirPackageForMonitoring(monitoringId) }
?.subscribeOn(Schedulers.io())
?.subscribe({
onCompletion(it ?: return@subscribe)
}, {
onFail(it)
BleLogHelper.writeError("Error fetching totak of packages", it)
})
subscriptions.add(subscription)
}
Есть что-то, что я могу сделать, чтобы уничтожить все экземпляры, когда viewModel очищена? Я пытался окружить этот код doAsync из anko lib, но он не работал вообще