1

ハンドラーの実行可能なプロセスが完了したことを Android コードで検出するにはどうすればよいですか? この特定のアプリケーションでは、ハンドラーが作業を終了する以外に、他のイベントは生成されません。

グローバルなブール値フラグの継続的なテストをループするだけwhile()ではうまくいかないようです:

... stuff to do before the handler's runnable is started
while (globalBooleanFlagStatingThatRunnableIsNotYetFinished)
                     Thread.sleep(5);
... stuff to do only after the handler's runnable is finished, like process data

このwhile()アプローチを使用すると、実行可能ファイルがブール値フラグを設定することに成功したかどうかに関係なく、OS によって強制終了がプッシュされるまで、セミコロンで実行が永久に一時停止するように見えます。

他の人は、実行可能なプロセスの完了をどのように検出しましたか?

4

2 に答える 2

0

待機に忙しい、または実際に待機しているという事実は、アプリの設計哲学に欠陥がある可能性があることを示しています。通常、何かを待っている場合、代わりに実行する必要があるのは、ハンドラーへの応答としてアクションをトリガーすることです。たとえば、この場合、単にonClickイベントを処理できる可能性があります。スレッドでこれを待っている場合、なぜですか?代わりに、スレッドを強制終了し、状態を残して(ステートマシンを使用して、継続を実装します)、onClickが呼び出されたら、新しいタスクを開始して残りの作業を実行します。

基本的に、あなたが実際にここで待つ必要があるかどうかはわかりませんが、代わりにハンドラーを使用する必要があります。

編集:あなたが探している種類のプログラミングは、アプリケーションのメインスレッドでは不可能です。代わりAsyncTaskに、タスクで作業を行う(つまり、定期的にフラッシュをオンまたはオフにする)、またはスレッドを生成するサービスを使用する必要があります。いずれにせよ、Androidスレッドについてよく読んでおく必要があります。問題は、メインスレッドを長時間実行する操作に使用しようとしていることに関連している可能性があります。はい、これは可能ですが、私はそれを「リアルタイムプログラミング」とは呼びません。これは単なるスレッドの問題です。

于 2012-06-09T19:42:31.007 に答える