【问题标题】:Multiple file upload on web server through android app通过 android 应用程序在 Web 服务器上上传多个文件
【发布时间】:2013-04-16 18:55:05
【问题描述】:

谁能给我解释一下对应的方法调用堆栈

您好,我正在开发一个 android 应用程序,我可以在其中将一些 mp3 文件上传到服务器上

这是给我上传文件的功能

uploadToServer(String arg1, String arg2)

现在我必须发送多个上传请求。我有两个 arg1 和 arg2 的 ArrayList

所以我使用 for 循环来迭代 ArrayList 并发送上传请求。

所以现在的问题是在第一次上传完成之前第二次自动启动。我还没有实现线程。那么为什么会这样。根据调用堆栈概念,直到第一个请求结束,第二个无法启动。为什么 for 循环的第二次迭代开始直到第一次完成。

【问题讨论】:

  • 可能是uploadToServer是异步的,即没有完成就返回了……
  • @ThaMe90 是的,该方法是异步的。但是如果它的执行没有结束,程序执行怎么又回到for循环了
  • 异步意味着操作在完成之前会返回。它通常会在事件完成后触发事件或调用回调方法。
  • 如果是同步方法,完成后返回。
  • 我建议阅读 wikipedia 上的异步性。简短的摘要是:异步方法将在启动的操作完成之前返回,因此您的应用程序不必等待所述操作的完成。它在某个后台线程中处理,当操作完成时会向您发出信号。

标签: java android multithreading file-upload for-loop


【解决方案1】:

只是为了完整性:

异步方法将在它开始的操作完成之前返回。这很好,该方法已经完成了它应该做的事情:启动一个执行操作的后台任务。

因此,简而言之,异步方法只是处理操作的单独(匿名)线程的发起者。完成后,它要么触发一个事件,要么调用一个回调方法(取决于使用的编程语言)。

Article

【讨论】:

  • 但是调用堆栈会发生什么。 +1 为您回答有关 asycc 概念的问题
  • 在任何情况下都没有什么特别的。它的行为与调用任何其他方法时相同。当它完成生成一个单独的线程来处理您想要发生的操作时,它会返回。因此,在方法产生线程后,它完成/返回,因此从调用堆栈中删除。
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 2013-06-15
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
相关资源
最近更新 更多