1 package leakcanary 2 3 import android.app.Application 4 import leakcanary.HeapAnalysisInterceptor.Chain 5 import leakcanary.ProcessInfo.AvailableRam.BelowThreshold 6 import leakcanary.ProcessInfo.AvailableRam.LowRamDevice 7 import leakcanary.ProcessInfo.AvailableRam.Memory 8 9 class MinimumMemoryInterceptor( 10 private val application: Application, 11 private val minimumRequiredAvailableMemoryBytes: Long = 100_000_000, 12 private val processInfo: ProcessInfo = ProcessInfo.Real 13 ) : HeapAnalysisInterceptor { 14 interceptnull15 override fun intercept(chain: Chain): HeapAnalysisJob.Result { 16 when (val memory = processInfo.availableRam(application)) { 17 LowRamDevice -> { 18 chain.job.cancel("low ram device") 19 } 20 BelowThreshold -> { 21 chain.job.cancel("low memory") 22 } 23 is Memory -> { 24 if (memory.bytes < minimumRequiredAvailableMemoryBytes) { 25 chain.job.cancel( 26 "not enough free memory: available ${memory.bytes} < min $minimumRequiredAvailableMemoryBytes" 27 ) 28 } 29 } 30 } 31 32 return chain.proceed() 33 } 34 }