我有一个使用JNI创建C ++渲染器的WallpaperService.Engine实现:
引擎(Java) - >渲染器(C ++)
如果渲染器是Java代码,我可以简单地说明
private Renderer renderer = new Renderer();
确保渲染器是使用我的引擎创建的,并在不再需要时自动销毁。那么最干净的方法是什么?
P.S。:我在想:
int rendererId = createNativeRenderer();
...
draw(rendererId); // call all native renderer methods specifying the object id
...
deleteNativeRenderer(rendererId);
但它不是很优雅,因为它需要明确删除,这很容易忘记。
答案 0 :(得分:0)
是的,它不是很优雅,但它是迄今为止最可靠的方式。 Java试图成为每个钉子的锤子,因此有一个叫做终结器的东西 - 一个被称为垃圾收集你的实例的Object方法。所以理想情况下完全符合您的需要,但几乎可以更好地避免。如果您仔细阅读the related Javadoc,您会发现:
但是,您可以使用终结器进行安全检查。
finalize()
并检查那里的标志状态。如果未标记为已删除,请记录令人讨厌的错误