我的活动正在运行一个算法,一旦创建活动,该算法可能会占用大量的设备内存,但工作正常,但是当我继续退出并按回去,然后再次轻按以进入活动时,会不停地进行很多操作有时,似乎该应用程序正在累积内存,我在个人资料上看到这并迫使该应用程序在不到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()中,该对象将通过ViewModel的onCleared()方法清除
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后,有什么办法可以销毁所有实例?我试图用anko lib的doAsync代替这段代码,但是根本没有用
答案 0 :(得分:1)
无法直接调用垃圾回收,但是您可以调用方法System.gc()
向垃圾回收器发送通知到垃圾回收器,请注意,这并没有不能保证会进行收集。
无论如何,这被认为是不好的做法,可能无法解决您的问题。
您的问题很可能是以下问题之一: