Java JNI与Android Binderized HAL技术解析
1. Java JNI相关要点
1.1 传感器对象清理保证
在使用传感器对象时,即使客户端代码未能关闭传感器对象, cleanup(AtomicLong) 方法也会被调用,以释放本地伴生对象。这里有两个需要注意的微妙点:
- AtomicLong引用数量 : AtomicLong 包含对本地对等对象的句柄,需要有多个引用指向它。若 AcmeProximitySensor 持有唯一引用,当它不可达时, AtomicLong 可能在传感器对象本身之前被释放,而 SensorCleaner 若不持有引用,就无法找到本地对象。
- 客户端显式关闭情况 :当行为良好的客户端显式关闭传感器对象时,其 SensorCleaner 会从映射中移除。此时,清理对象不可达, AcmeProximitySensor 对象持有对对等句柄的唯一可达引用。清理器可能首先被垃圾回收,不再排队或调度,但这没关系,因为它已无任务。
1.2 JNI使用提示
1.2.1 遵守规则
使用本地代码可能会破坏Java规则,例如改变 String 或其他不可变对象的内容。虽然JNI方法会尝试强制实施可见性和可变性约束,但绕过这些约束是可能的。改变规则会带来麻烦,因此要遵守Java规则。
Java JNI与Android Binderized HAL解析
超级会员免费看
订阅专栏 解锁全文


被折叠的 条评论
为什么被折叠?



