关于android程序死掉的问题,android - 如何使用工作管理器解决用户杀死应用程序后退出区域的问题? - SO中文参考 - www.soinside.com...

本文围绕altbeacon library展开,作者在创建小型库时,遇到应用被杀死后无法继续扫描信标的问题。测试示例代码时应用可在后台扫描,但自己编写的BeaconService类在应用被杀死后无法继续扫描。作者得到库不符合要求的答复,还提出用WorkManager重新安排扫描工作者的解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有altbeacon library的问题。我正在准备一个小型库,其中一个模块扫描背景和前景中的信标。我在Github上的一个库中找到了示例应用程序,我已经测试了他们的代码(应用程序类),一切正常。用户进入任务切换器并从屏幕上滑动应用程序后,将在后台继续扫描。

但我正在创建一个库,所以我无法将我的代码粘贴到Application类中。考虑到这一点,我需要做这样的事情:MyLibrary.init(this)在Ap​​plicationClass中的onCreate方法中。所以我编写了一个BeaconService类,其代码与应用程序类完全相同。我已经传递给这个类应用程序上下文(我通过调试我的代码检查了我的BeaconService应用程序上下文)。之后当应用程序没有通过从任务切换器交换杀死时,evrything工作完美。杀死应用程序后,我退出了区域事件,即使信标距离设备大约20厘米,我也无法继续扫描。

我在altbeacon Github上创建了一个问题(你可以找到我的示例代码并记录here),我得到的答案是库不符合我的要求。此外,如果我有进一步的问题如何解决我的问题,我应该在stackoverflow上询问。

所以我有一个想法,也许我可以使用WorkManager并一次又一次地重新安排扫描信标工作者(OneTimeWork)。这可能是围绕从Android 8+引入的调度后台任务的延迟限制的一种方法。

承诺的示例代码:

class BeaconWorker(appCtx: Context, workerParameters: WorkerParameters) : CoroutineWorker(appCtx, workerParameters) {

override val coroutineContext: CoroutineDispatcher

get() = Dispatchers.Default

override suspend fun doWork() = supervisorScope {

// rescheduling worker

if(isActive) {

enqueNextWork()

}

// make scan (This could be only one scan with list of found beacons)

val beacons = makeScan()

Result.success()

}

}

如何使用altbeacon库实现这一目标?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值