当我在 Nexus One、Android 2.2 上运行我的应用程序时,我遇到了一个奇怪的问题。在我的应用程序中,我使用了在 NDK 下构建的本机 .so 库。在 Java 代码中,我有 2 个线程:一个 UI 线程,一个从本机 so lib 运行代码,然后使用结果数据更新 UI。在 C++ 代码中,我有一个全局变量“int count”,它记录了特定方法“myMethod”被调用的次数,每次“myMethod”被调用时计数加一。当我使用 Android 2.2 在 Nexus One 中运行我的应用程序时,出现了奇怪的问题。在我的日志中,计数为 1、2、3,然后有一条消息显示“08-24 12:32:57.961: DEBUG/dalvikvm(19244): GC_FOR_MALLOC 在 48 毫秒内释放了 267 个对象/13712 个字节”。在这个 GC_FOR_MALLOC 事件之后,我的计数被重置,再次从 1 开始,然后是 2、3、4... 然后似乎有2个线程运行相同的“myMethod”,每个线程都输出自己的跟踪,随机混合其他跟踪。例如,跟踪可以是
1, 2, 3, GC_FOR_MALLOC, 1, 2, 3, 4, 5, GC_FOR_MALLOC, 4, 5, 6, GC_FOR_MALLOC, 6, 7...
当我在 Android Emulator 2.1 或 2.2 上使用完全相同的代码运行相同的应用程序时,问题从未出现过,并且模拟器上没有 GC_FOR_MALLOC 事件。
有人遇到过这个问题吗?谢谢您的帮助!