在 Android 上的后台工作期间获取 UI 输入
Posted
技术标签:
【中文标题】在 Android 上的后台工作期间获取 UI 输入【英文标题】:Getting UI input during background work on Android 【发布时间】:2014-06-14 15:09:10 【问题描述】:我目前正在开发一款简单的电梯 android 游戏。用户可以在多个楼层添加乘客,他们在那里等到电梯接他们。如果是这样,乘客必须选择电梯内的目的地楼层。 对于每个游戏周期,电梯都会装载/卸载乘客,选择方向并移动。
现在的问题是,在一次迭代中,用户必须为每位已装载的乘客选择目的地楼层。因此,我需要以某种方式在后台运行电梯循环,但在一次迭代中会获得多个 UI 输入,而后台线程必须等待所有输入完成。
有没有人知道一个(好的)解决方案?
提前致谢
编辑以更好地理解代码的简化视图
public class Elevator
public void iterate()
unloadPassengers();
loadPassengers();
move();
private void loadPassengers()
//if elevator isn't idle collect passengers going in same direction
if (!operation.isIdle())
Collection<Passenger> passengers = currentFloor.loadPassengers(operation.getDirection());
if (!passengers.isEmpty())
for (Passenger passenger : passengers)
//!! chooseDestinationFloor() is the method where the user has to choose his destination floor, which requires UI input for each passenger during the background lifecycle; Here I would need this thread to block for each passenger until I got user input
passenger.setDestinationFloor(passenger.chooseDestinationFloor());
loadedPassengers.put(passenger.getDirection(), passenger);
firePassengersLoaded(currentFloor, passengers.toArray(new Passenger[passengers.size()]));
【问题讨论】:
发布你在后台线程中执行操作的代码 【参考方案1】:尝试使用runOnUiThread(new Runnable()
public void run()
//your code to show user input here
);
【讨论】:
我的问题是我必须在后台线程上等待 UI 结果。 runOnUiThread() 只向ui线程异步添加代码,没有任何回调以上是关于在 Android 上的后台工作期间获取 UI 输入的主要内容,如果未能解决你的问题,请参考以下文章
通过AsyncTask访问后台后得到的返回数据在Android端显示