0

私は Ruby で書かれた 2 つの異なるプロジェクトを持っています。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 個しかないことがわかりました。私が指摘された解決策は、再帰の代わりに反復を使用することでした。:)

だから今、私は本当の解決策を知りません。yaml、httpi、nokogiri など、大規模または有用な gem のほとんどで同じ問題が発生します。

編集: Google メーリング リストにも同様の質問があります。

于 2011-11-18T15:37:16.450 に答える