0

有什么方法可以return;从内部函数返回外部函数的值(或只是)?

我的问题类似于这个问题: Breaking out of nested loops in Java,但不同的是,在这个问题中,提问者询问了如何在嵌套循环中打破外部循环,而我询问是否返回嵌套函数中的外部函数。

public void outerFunction ()
{
    runOnUiThread (new Runnable()
    {
        @Override
        public void run ()
        {
            // Here i want to return;, so the function will not continue after runOnUiThread
        }
    });

    // Code here should not run.

}
4

2 回答 2

1

该方法runOnUiThread接受一个Runnable参数。我们可以假设它在run()某处使用它的方法。例如,如果该方法是

public void runOnUiThread(Runnable runnable) {
    // do a bunch of stuff
    // some more logic
    runnable.run();
    // more logic
    return;
}

您不能从被调用方法 ( ) 中强制return调用方法( )。但是,您可以在被调用的方法中抛出一个将停止所有执行的方法,但您不一定知道它在哪里被捕获。runOnUiThread()run()Exception

于 2013-09-10T19:44:01.980 回答
0

我不确定我是否理解这个问题。但我假设你对多线程不是很熟悉。

调用后的代码Runnable和调用后的代码runOnUiThread实际上是同时运行的,但在不同的线程上。因此,它距离嵌套循环或单线程嵌套方法调用仅数光年。

您实际上可以对另一个线程进行“阻塞”调用以等待一个值,但我认为将所有这些都写在 stackoverflow 答案中是不合适的。你应该阅读多线程,我强烈推荐Java Concurrency in Practice。但是应该警告您,这不是您可以在几天内掌握的微不足道的话题。你也可以看看这个教程;该接口Future实现了我所指的“阻塞”调用。

编辑
我用Java写了上面的想法。Android 的情况更复杂,因为为了使用 a Future,您需要ExecutorService为 UI 线程获取一个,我不确定这是否可能。

有许多 Android 特定的多线程结构(参见例如本教程或官方文档)。当然可以解决您的问题,但我们没有足够的细节。此外,您可能不应该尝试为您的问题找到快速解决方案,而是重新考虑您的整个设计,以便自然地适应 Android 多线程范例。

于 2013-09-10T20:47:41.657 回答