有人可以解释一下startActivity(intent)和startActivityForResult(intent)是如何异步的?

时间:2012-12-17 17:41:55

标签: android multithreading asynchronous android-activity synchronous

如果异步线程是一个与主线程分开操作并且不干扰主线程的线程......

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

我读过的大部分内容都表明这些都是异步的,但是有一些相互矛盾的答案,并且那些说这并不能给出令人信服的论据的人。

因此,如果有任何人清楚地知道他们为什么是同步/异步,那么我将是一个非常感激的人!

干杯

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

将活动纳入同步/异步的混合可能会导致马的负荷。但它仍然指的是......

的原则 在调用堆栈可以继续之前,必须完成

Synchronous个方法/命令。

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

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

2 个答案:

答案 0 :(得分:26)

startActivity(intent)startActivityForResult(intent)是异步的,因为这些方法在不启动Activity的情况下立即返回。实际上,只有在当前Activity的生命周期事件结束后,它们才会安排Activity启动。

如果你有一些东西需要一些时间来完成,那么在第一个活动的onPause()方法中,新的Activity将很慢启动。

答案 1 :(得分:3)

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

但是当被调用活动终止setting a result时,您的活动将恢复,并且您将onActivityResult作为包含结果的回调调用。