对不起,如果这是一个愚蠢的问题。我对Android非常陌生。
我编写了一个使用绑定服务库的库。也就是说,我的库有一个派生自使用binder的库类的类。
我的库旨在通过API以独立于平台的方式提供该数据(它不能公开绑定器依赖关系)。对于这个讨论,让我们说它有一个"开始"和"停止"功能。如果ref-count为零,则开始旋转服务,并递增引用计数。停止减少引用计数,当引用计数变为零时,我想关闭所有内容,运行清理代码等。
我能找到的所有文档都说我必须调用startThreadPool和joinThreadPool来接收活页夹事件。但joinThreadPool阻塞,因此Start函数永远不会返回。
这意味着需要在线程中进行绑定订阅。但即使我把joinThreadPool的调用放在自己的线程中,我也不知道如何让joinThreadPool干净地退出,这样我就可以清理了。
所以我尝试创建一个只调用startThreadPool并在设置原子时在sleep循环中旋转的线程;停止清除原子。这在理论上是有效的,但我的调试似乎表明,如果我尝试结束使用我的API的过程,我会得到一个"粘合剂退出"我的清理代码可以执行之前的事件。
基本问题是:如何以非阻塞方式使用活页夹,然后保留活页夹并进行清理?