【问题标题】:Getting UI input during background work on Android在 Android 上的后台工作期间获取 UI 输入
【发布时间】: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()]));
        }
    }
}
}

【问题讨论】:

  • 发布你在后台线程中执行操作的代码

标签: android multithreading user-interface inter-process-communicat


【解决方案1】:

尝试使用runOnUiThread(new Runnable() { public void run() {
//your code to show user input here } });

【讨论】:

  • 我的问题是我必须在后台线程上等待 UI 结果。 runOnUiThread() 只向ui线程异步添加代码,没有任何回调
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 2011-07-18
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多