0

新しいアクティビティを作成すると、新しいアクティビティは新しいスレッドで実行されますか?

Log.d("testing", "before activity start");

intent = new Intent(CurrentActivity.this, SecondActivity.class); //I put "Log.d("testing","in secondActivity")" in SecondActivity.onCreate()
startActivity(intent);

Log.d("testing", "after activity start");

実行の順序は「アクティビティ開始前」→「secondActivity内」→「アクティビティ開始後」になると思いました。

しかし実際にはそうではありません。誰もが理由を知っていますか?では、新しいアクティビティは新しいスレッドで実行されますか?

4

2 に答える 2

2

いいえ、新しいスレッドでは実行されません。UIスレッドで実行されています。「デフォルトでは、1 つのプロセス内のすべてのアプリケーション コードがメインの UI スレッドで実行されます。これは、UI イベントも処理する同じスレッドです。唯一の例外は、他のプロセスからの IPC 呼び出しを処理するコードです。システムは、すべての着信 IPC 呼び出しをディスパッチするための、各プロセスのトランザクション スレッドの個別のプール。開発者は、メインの UI スレッドをブロックしないように、実行時間の長いコードに対して個別のスレッドを作成する必要があります。」http://developer.android.com/resources/faq/framework.html

于 2012-04-25T02:15:27.657 に答える
0

これは (アプリ内のすべてのアクティビティと同様に) 同じスレッドで実行されますが、アクティビティの作成はstartActivity呼び出し内では行われません。舞台裏では、フレームワークにはすべてのアクティビティのループがあり、保留中の操作のメッセージ キューがあります。メッセージ キューは、ユーザー入力と状態の変化に関するメッセージを受信し、ループのたびにキューからの次の入力を処理し、場合によってはActivityまたはViewコールバック ( などonTouchEvent) のいずれかを呼び出します。

を呼び出すとstartActivity、その要求がメイン スレッドのメッセージ キューに登録されます。関数が戻った後、ループはキューからそのリクエストを取得し、アクティビティを作成してonCreate、その他すべてのライフサイクル コールバックを呼び出します。onCreateそのため、関数が返されるまで呼び出されたことがわかりません。

ちなみに、コールバックの実行に時間がかかりすぎたり、ブロックしたりしないように注意する必要があるのはそのためです。コールバックが戻った後でのみ、スレッドのループはキューからの他の要求 (ユーザー入力など) を処理できます。

于 2012-11-15T15:44:37.323 に答える