Использование JSON в проекте Ruboto
У меня есть два разных проекта, написанных на Ruby, использующих Ruboto для упаковки Ruby в.apk, чтобы его можно было перенести на устройство Android. Оба проекта будут скомпилированы и запущены на моем телефоне, а также на эмуляторе телефона, но добавление строки 'require' json '' в обоих проектах, не меняя ничего другого, приводит к сбою при запуске и возвращает меня на домашнюю страницу телефона. Так что это определенно что-то с этой линией. Любые идеи о том, что может вызвать это?
2 ответа
Ruboto предлагает вспомогательный метод для запуска кода с увеличенным размером стека:
require 'ruboto/util/stack'
with_large_stack{require 'json'}
или же
with_large_stack do
require 'json'
end
Это запустит ваш код в отдельном потоке с большим стеком, позволяющим глубокую рекурсию. Размер стека по умолчанию для метода with_large_stack составляет 64 КБ. Вы можете установить это значение, используя необязательный целочисленный аргумент или опциональный хеш:
with_large_stack(128){require 'json'}
или же
with_large_stack(:size => 128){require 'json'}
Размер стека указывается в килобайтах (КБ).
У меня такая же проблема; ты можешь использовать
adb logcat
чтобы получить больше информации о катастрофе. Если вы посмотрите туда, вы найдете сообщение об ошибке переполнения стека. Вы можете обойти это переполнение стека, требуя только json/pure:
require 'json/pure'
Это по-прежнему не помогает с общей проблемой: большинство вызовов require приводят к переполнению стека. Через Google я обнаружил, что Android не может иметь слишком много вложенных рекурсивных вызовов, всего около 22, до тех пор, пока он не выйдет из строя с переполнением стека. Решение, на которое я указывал, состояло в том, чтобы использовать итерацию, а не рекурсию.:)
Так что сейчас я не знаю реального решения. Большинство больших или полезных драгоценных камней приводят к той же самой проблеме, например, yaml, httpi или nokogiri.
Изменить: есть аналогичный вопрос в списке рассылки Google.