0

我有两个用 Ruby 编写的不同项目,使用 Ruboto 将 Ruby 打包到 .apk 中,以便可以将其推送到 Android 设备上。这两个项目都将在我的手机和手机模拟器上编译和运行,但是在这两个项目中添加“require 'json'”行,没有任何改变,导致它们在启动时失败并将我踢回手机主页。所以这绝对是那条线的东西。关于可能导致这种情况的任何想法?

4

2 回答 2

2

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) 为单位。

于 2012-03-14T20:25:24.857 回答
1

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

adb logcat

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

require 'json/pure'

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

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

编辑:谷歌邮件列表中有一个类似的问题。

于 2011-11-18T15:37:16.450 回答