在Ruboto项目中使用JSON



我用Ruby编写了两个不同的项目,使用Ruboto将Ruby打包到.apk中,以便它可以推送到Android设备上。这两个项目都将在我的手机以及手机模拟器上编译和运行,但是在两个项目中添加"require"json行,不改变任何其他内容,导致它们在启动时失败,并将我踢回手机主页。所以肯定是这条直线上的东西。你知道是什么原因导致的吗?

Ruboto提供了一个辅助方法来运行堆栈大小增加的代码:

require 'ruboto/util/stack'
with_large_stack{require 'json'}

with_large_stack do
  require 'json'
end

这将在一个单独的线程中运行您的代码,具有更大的堆栈,允许深度递归。with_large_stack方法的默认堆栈大小是64KB。您可以使用可选的整数参数或选项哈希来设置此值:

with_large_stack(128){require 'json'}

with_large_stack(:size => 128){require 'json'}

堆栈大小以KB为单位给出。

我有同样的问题;你可以使用

adb logcat

以获取有关崩溃的更多信息。如果您查看那里,就会发现一条关于堆栈溢出的错误消息。您可以通过只要求json/pure:

来避免堆栈溢出。
require 'json/pure'

这仍然无助于解决一般问题:大多数require调用会导致堆栈溢出。通过Google,我发现Android不能有太多嵌套的递归调用,只有大约22个,直到它因堆栈溢出而崩溃。我得到的解决方案是使用迭代,而不是递归。:)

所以现在,我不知道真正的解决方案。大多数大型或有用的gem都会导致同样的问题,例如yaml、httpi或nokogiri。

编辑:在Google邮件列表中也有类似的问题

最新更新