Skip to content

Leaked scan callback when app be killed by task manager #139

@doanpt

Description

@doanpt

Hi,
I'm using your lib to build an android app,
In my app, I start scanScan when application lifecycle is onStart and stopScan when application lifecycle is onStop as below.

override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) =
    when (event) {
        Lifecycle.Event.ON_START -> {
            Timber.d("onStateChanged onStart")
            dependencies.bleLockModule.onStart()
        }
        Lifecycle.Event.ON_STOP -> {
            Timber.d("onStateChanged onStop")
            dependencies.bleLockModule.onStop()
        }
        else -> {
            Timber.d("onStateChanged $event")
        }
    }
override fun startScan(scanAggressively: Boolean) {
    if (scanCallback == null) {
        val callback = BleScanCallBack(scope, _resultsFlow)
        scanCallback = callback
        runCatching {
            scanner.startScan(emptyList(), buildScanSettings(scanAggressively), callback)
            restartScanning()
            Timber.d("BLE scan started")
        }.onFailure {
            Timber.e("Start scan failed: $it")
            callback.onScanFailed(BleError.ScanErrorCode.Unknown.value)
        }
    }
}

override fun stopScan() {
    scanCallback?.let {
        scanner.stopScan(it)
        Timber.d("BLE scan stop scanning")
        scanCallback = null
    } ?: Timber.d("Ignore stop scan due to callback null")
}

I found it working fine, but when app killed by task manager(recents tab), I see that I leaked the scan callback due to onStop not being called. after I tried to close/-reopen my app more that 32 times, android os throw error: "Unable to register GATT client, MAX client reached: 32"
so cloud you please share me the best practice to call stopScan when app is being killed by task manager

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions