gpt4 book ai didi

android - 一个Java线程一次如何执行一个以上的 native 方法?

转载 作者:行者123 更新时间:2023-12-03 13:12:49 34 4
gpt4 key购买 nike

我试图在我的Android应用程序中查找问题。此问题在代码的 native 层中导致垃圾回收期间导致崩溃。我会自我解释。

我的应用程序仅包含Java源代码控制GUI元素以及一个 native 库,该库管理应用程序的呈现和其他性能关键部分。它具有用于渲染的GLSurfaceView。

Java层需要能够访问和实例化 native 对象,因此这些对象通过Swig公开给Java。 Swig所做的是,在每个包装类(在Java中)中,它都会生成一个finalize方法,该方法将调用 native delete运算符。

考虑以下伪代码:

在C++中:

class MyClass {

public:

MyClass () {}

~MyClass ()
{
print("deleting MyClass instance");
print("doing 1");
do1();
print("doing 2");
do2();
print("doing 3");
do3();
print("instance deleted");
}
};

这是伪代码,这意味着例如“print”代表android logcat中的print,我只是保持它简直愚蠢;)。

让我感到困惑的是,当垃圾收集器运行并在某些情况下调用析构函数时,我可以找到多个析构函数之间交错的输出(就像它们被同时删除一样)。在此示例中,它可能是:
deleting MyClass instance
doing 1
deleting MyClass instance
doing2
doing1
doing2
deleting MyClass instance
doing3
doing3
instance deleted
doing1
doing2
instance deleted
doing3
instance deleted

同时logcat明确指出这些消息来自同一线程(终结器线程)。

因此,我的问题是:“单个线程如何同时执行多个本地调用?”

最佳答案

native 析构函数会回叫到VM吗?

关于android - 一个Java线程一次如何执行一个以上的 native 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19567401/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com