Приложение Roku завершает работу без ошибок при втором ожидании roMessagePort - PullRequest
2 голосов
/ 22 февраля 2012

Это самый маленький фрагмент, который мне удалось воспроизвести, чтобы воспроизвести проблему.

Sub Main()
    u = getStringFromKeyboard("Enter username")
    p = getStringFromKeyboard("Enter password")
End Sub

Function getStringFromKeyboard(message = "" As String) As String
    result = ""
    port = CreateObject("roMessagePort")
    screen = CreateObject("roKeyboardScreen")
    screen.SetMessagePort(port)
    screen.SetDisplayText(message)
    screen.AddButton(1, "OK")
    screen.Show()
    while true
        print "waiting..."
        msg = wait(0, port)
        print "done waiting"
        if type(msg) = "roKeyboardScreenEvent" then
            if msg.GetIndex() = 1 then
                result = screen.GetText()
                exit while
            end if
        end if
    end while
    screen.Close()
    return result
End Function

Roku правильно запросит имя пользователя, но просто выйдет в главное меню, прежде чем запрашивать пароль. Выходные данные отладки показывают, что приложение выполняет второй вызов функции wait ():

waiting...
done waiting
waiting...

Это SDK v4.1 и OS v4.2.1006.

Кто-нибудь знает, что происходит?

1 Ответ

5 голосов
/ 22 февраля 2012

Ответ пользователя gonzotek на форумах разработчиков Roku:

Создание фасадного экрана. Roku выходит из приложения сразу после последний экран закрыт. Вы создаете первый экран клавиатуры, а также закройте его в функции getStringFromKeyboard, и так как нет другие экраны открываются в тот момент, когда Roku убивает приложение. См. Объяснение RokuKevin здесь: viewtopic.php? P = 162550 # p162550 (примечание: он ссылается на «мерцание экрана», которое могло бы быть правдой, когда он написал это, но в настоящее время необходимо иметь экран всегда застрял в задней части вашего стека на всю жизнь вашего приложения: viewtopic.php? p = 321402 # p321402).

...