#android #scala #actor
#Android #scala #актер
Вопрос:
В настоящее время я тестирую удаленных актеров на Android. Я создал небольшую программу с двумя классами: первый реализует основное действие, а второй реализует субъекта.
Когда я создаю своего актера, программа завершает работу с этим сообщением: переполнение стека при вызове Ljava / lang / throwable … по какой-то причине стек программы кажется слишком маленьким (или есть какая-то ошибка) во время выполнения строки 3 моего второго класса (как показано ниже).
Это код моего второго класса:
class Person(ip : String, port : Int) extends Actor{
val node = Node(ip, port)
var server = select(node, 'myName) // <'----- program crashes here
def act(){
while(true){
receive {
case Post(msg) => //do something
case Stop => exit()
}
}
}
}
Кто-нибудь знает решение этой ошибки или какие-либо идеи или имеет какой-либо опыт по запуску удаленных исполнителей на Android?
Спасибо
Ответ №1:
Я нашел проблему! Я посмотрел источник удаленных участников, и функция «generatePort» в «TcpService» содержит рекурсивный вызов для поиска свободного порта сокета. Android не предоставил порт, потому что… the AndroidManifest.xml должно содержать разрешение ИНТЕРНЕТА на использование сокета.
Я надеюсь, что эта тема кому-нибудь поможет
Ответ №2:
Возникли некоторые проблемы с ограничениями стека Android. Например, известна библиотека dispatch json (http://dispatch.databinder.net/Lift-JSON ) взорвать стек из-за использования в нем комбинаторов синтаксического анализа.
Взгляните на этот пост http://groups.google.com/group/android-developers/browse_thread/thread/d880c3d5777127d9 . Во втором сообщении описывается, как вы можете создать поток с большим стеком с помощью этого конструктора: http://developer.android.com/reference/java/lang/Thread.html#Thread(java.lang .ThreadGroup, java.lang.Доступен для запуска, java.lang.Строка, long)
Комментарии:
1. если я укажу размер стека при создании потока, программа тоже вылетит. Если я установлю большой размер стека, программе потребуется больше времени, прежде чем произойдет сбой. Это похоже на проблему рекурсии… Я не нашел решения