在 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端显示

如何在Android开发中用AsyncTask异步更新UI界面

Android中UI线程与后台线程交互设计的6种方法

Android AsyncTask工作原理

转载Android中UI线程与后台线程交互设计的5种方法

当来电活动置于后台时返回呼叫 UI