удаленный актер не работает на Android -> stack overflow

#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. если я укажу размер стека при создании потока, программа тоже вылетит. Если я установлю большой размер стека, программе потребуется больше времени, прежде чем произойдет сбой. Это похоже на проблему рекурсии… Я не нашел решения