小编Leo*_*ilä的帖子

Surface在Android上进行分区后如何处理垃圾回收?

我正在使用源代码Surface.java作为此问题的参考.

Surface实现了Parcelable接口,它还保存了本机端对象的句柄.

我很想知道在这种情况下如何处理垃圾收集:

  1. 创建曲面(A)并将其写入包裹.之后没有提到它.

  2. 从包裹中读取原始表面(B)的副本; 让我们说这发生在另一个用于渲染的线程上.此实例现在保持与(A)相同的本机句柄,并且在某处对此实例有强引用.

  3. 发生GC并收集(A),因为它不再被引用.finalize()运行,调用release(),然后调用nativeRelease(long)本机句柄.

粗略地看一下源代码让我觉得现在(B)也应该踢掉桶并停止工作,因为本机句柄被释放了,但是在尝试复制之后似乎并非如此.(A)确实被收集但(B)继续存在并仍然可用.

现在我感觉有一些引用计数继续使用本机对象,或者在parcelling进程的本机端进行其他一些魔术.

无论我的假设是否正确,我都在寻找导致此行为的原因的概述,最好是对框架源代码的一些引用.我也对表面锁定在类似情况下的工作方式感兴趣.

java java-native-interface android garbage-collection parcelable

4
推荐指数
1
解决办法
554
查看次数