我在Android中开发的第一个应用程序涉及后台的BLE扫描。应用程序有两个按钮来启动服务(进行扫描并记录结果)和停止服务。
从文档中,我了解了服务和IntentService之间的区别。我怀疑使用IntentService并不是最好的方法,因为当交付给它的所有意图都被处理时,Android系统就会破坏服务,因此在服务创建的工作线程中运行的扫描也将停止工作。然而,我想试着测试一下我的知识。
正如我所预期的,该服务在创建后几乎立即被销毁。但是,通知检测到的新设备的日志继续出现,这意味着即使服务被破坏,扫描过程也会继续工作。当我关闭主活动时,扫描终于停止了。我想知道为什么扫描进程似乎被绑定到主活动的线程,而不是绑定到意图服务创建的线程(自动)。为什么即使服务已被破坏,扫描进程仍能继续工作?
发布于 2017-04-26 20:39:43
根据流程优先博客文章
Android并不仅仅为了杀死东西而去杀生(记住:从头开始并不是免费的!),因此这些进程可能会在被回收之前停留一段时间,这是因为对更高类别的内存的需求,根据最近使用最少的顺序(最老的是先回收)。
因此,即使您的服务已经停止,您的进程也可以在内存中停留一段时间。由于您还没有在onDestroy上专门停止BLE扫描,所以这项工作将继续进行,直到您的进程被终止以恢复内存。
https://stackoverflow.com/questions/43644056
复制相似问题