16

非同期スレッドがメインスレッドに別々に動作し、メインスレッドに干渉しないスレッドである場合..誰かがstartActivity(intent)とstartActivityForResult(intent)がどのように非同期であるか説明できますか?それは<code>startActivity(intent)</code>によって開始された後

新しいActivityは、メインスレッドを占有しませんか?

私がこれを読んだことの大部分は両方とも非同期だと言っていますが、矛盾する回答が少なく、これを言う人々は確かに説得力のある議論をしません。

だから、頭が明瞭で同期/非同期の理由を説明できる人なら、私はとても感謝しています!

乾杯

編集:だから私は、オンラインでこれらの二つの良いフォークといくつかのものに由来している答えは...、同期/非同期のミックスに活動を持ち込み

、約来て馬の負荷を引き起こす可能性があります。しかし、それでもなお、呼び出しのスタックを続行する前に、メソッド/コマンドを完了する必要があります..

Synchronous

Asynchronous(スレッド/ AsyncTaskで一般的に実行される)メソッド/コマンドは、並列実行され、実行のメインスレッドが続行されます。

startActivity(インテント)メソッドとstartActivityForResult(インテント)メソッドは非ブロッキングであり、実行スレッドが対応するタスクを実行している間も実行を継続できるため、非同期です。

+5

正確ではありません。 startActivityは、後でUIスレッドで実行される新しいアクティビティをスケジュールします。すぐには起動しないので、メソッドはただちに戻りますという点では非同期です。 – njzk2

+0

ああ、ありがとう!助けを感謝します! – mgibson

+0

回答を作成したい場合は、私はそれを受け入れます – mgibson

答えて

20

startActivity(intent)startActivityForResult(intent)は、これらのメソッドがアクティビティを開始せずにすぐに戻るという意味で非同期です。実際には、アクティビティのスケジュールは、現在のアクティビティのライフサイクルイベントが終了した後にのみ開始されます。

テイクアウトは、何かがある場合、完了するまでに時間がかかる場合があります。onPause()最初のアクティビティのメソッドでは、新しいActivityの処理が遅くなります。

+2

完璧な&コンパクトな答え! –

+0

それでも、startActivity(Intent)がonPause()を呼び出すことがあります。私はここで推測していますが、あなたの答えから非同期性は追随しません。 実際には、コールが同期しているかどうかをチェックします。 –

2

startActivityForResultの場合でも、非同期呼び出しを実行します。発信者のアクティビティが中断され、別のプロセスで新しいものが開始されます(別のユーザーで実行されている場合)。

しかし、呼び出されたアクティビティが終了すると、setting a resultのアクティビティが再開され、結果を含むコールバックと呼ばれるonActivityResultが返されます。

関連する問題