【问题标题】:Can someone please explain how startActivity(intent) and startActivityForResult(intent) are Asynchronous?有人可以解释一下 startActivity(intent) 和 startActivityForResult(intent) 是如何异步的吗?
【发布时间】:2012-12-04 20:18:53
【问题描述】:

如果异步线程是独立于主线程运行且不干扰主线程的线程...

新的Activity通过startActivity(intent)启动后是否不占用主线程?

我读到的大部分内容都说这些都是异步的,但是有相当多的相互矛盾的答案,而且说这句话的人并没有真正给出令人信服的论据。

因此,如果有人清楚这一点并能解释为什么它们是同步/异步的,我将非常感激!

干杯

编辑:所以我从这两个好人和网上的一些东西中得出的答案......

将活动带入同步/异步的混合中可能会导致大量负载出现。但它仍然是指...的原则。

Synchronous 方法/命令必须在调用堆栈继续之前完成。

Asynchronous 方法/命令(通常在线程/AsyncTask 中完成)并行继续,允许执行的主线程继续。 (它可以在自己的时间返回)

startActivity(intent)startActivityForResult(intent) 方法是异步的,因为它们是非阻塞的,并且允许执行线程在执行相应任务的同时继续。

【问题讨论】:

  • 不完全是。 startActivity 计划稍后在 UI 线程上运行一个新活动。它是异步的,它不会立即启动,并且方法会立即返回。
  • 啊,谢谢!感谢您的帮助!
  • 如果你想创建一个答案,我会接受它

标签: android multithreading asynchronous android-activity synchronous


【解决方案1】:

startActivity(intent)startActivityForResult(intent) 是异步的,因为这些方法会立即返回而无需启动 Activity。实际上,他们安排一个 Activity 仅在当前 Activity 的生命周期事件完成后启动。

要点是,如果你有一些东西,需要一些时间才能完成,在第一个活动的onPause() 方法中,新的Activity 启动会很慢。

【讨论】:

  • 完美而简洁的答案!
  • 它仍然可能是 startActivity(Intent) 自己调用 onPause() 。我在这里推测,但从你的回答异步并没有遵循。其实我要检查调用是否是同步的。
【解决方案2】:

当您startActivityForResult 时,您仍然执行异步调用。您的调用者活动被暂停,新的活动在另一个进程中启动(如果它在不同的用户下运行)。

但是当被调用的 Activity 终止 setting a result 时,您的 Activity 会恢复,并且您会在包含结果的回调中调用 onActivityResult

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2011-11-22
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多