2016-11-26 15 views
2

我正在Android中为中等简单的Pascal/BASIC类编程语言实现解释器。我完成了解析器,所以程序得到识别,加载到内存中并准备执行。语言是程序,仿真命令行输入/输出和显然非事件驱动像Android中的Java。在Android中接收用户输入并继续执行的正确方法

的样本程序可能看起来像这样:

FOR i FROM 1 TO 10 
    READ Name 
    PRINT "User ", i, " name: ", Name 
END_LOOP 

相对较新的Android,我不知道,Android的对话框是异步的,因此不能中断执行,在几十个类似的问题解释。 (1),(2),(3),(4)
所以,我最初以为我会实现READ命令通过显示一个模态对话框。执行涉及读取来自用户的输入的代码,需要等待才能完成,然后再转到下一行代码。但是这不应该用上面的帖子中提到的对话来完成。

我发现最“合适的”方法是“保存”整个程序的执行状态,停止执行,然后在用户从对话框输入内容时加载最后一个状态开始执行。但这似乎是不可能的,对于这样一个简单的任务而言,这太麻烦了。有更容易的方法吗?

欢迎任何建议。

回答

1

我不知道,Android的对话框是异步的,因此不能中断执行,在几十个类似的问题

所有的Android UI是异步的解释。

我最初以为我会通过显示一个模态对话框来实现READ命令。

这没有什么内在错误。但是,READ将需要暂停执行您的解释器,直到用户完成对话。

有没有更简单的方法?

即兴...

第1步:运行在后台线程解释。

步骤2:让READ代码在主应用程序线程上调用您的对话框,然后在Semaphore上阻止您的后台线程。步骤#3:让对话代码通过某种方式将用户输入的结果传递给解释器,然后在对话框消失时释放Semaphore

步骤#4:您的解释器代码继续。

+0

非常感谢您的回答。我会尽量明天实施它,只要我读了第一个变量就接受答案。 ;-) – mavrosxristoforos

+0

我刚刚做到了。谢谢您的回答。对于未来的读者,我做了以下工作: 1.让我的解释器实现'Runnable'接口。 2.创建一个'Semaphore'并在解释器中传递它。 3.通过编写'new Thread(interpreter).start();' 在新线程上启动它4.用'Handler(Looper.getMainLooper())'打开对话框。' 5.等待'信号量'释放()'许可证。 6继续 – mavrosxristoforos

相关问题