私は、サービスを提供するUART(Serial Comms)と、UIの応答性を維持するために個別のワーカースレッドを必要とする他のいくつかの「タスク」を備えたアプリケーションを持っています。私の問題は、これらのスレッドをいつ/どこで作成する必要があるのか、いつ終了するのかを理解することです。現在、メインUIアクティビティのOnCreate()で作成しています。しかし、最近、あるアクティビティからメインアクティビティに「ジャンプ」する必要があったため、これが大混乱を引き起こしています。IntentとStartActivity()を適切なフラグとともに使用して、「トップにクリア」することをお勧めします。しかし、これはもちろん、私のスレッドにまったく新しいインスタンスのセットを引き起こし、すべてが解き放たれます。どういうわけかUIに関連付けられたサービスを使用する必要がありますか?メインアプリケーションをサブクラス化したので、アプリケーションのOnCreate()があります。私はそれに傾いていますが、できます」
2 に答える
2
サービスを使用します。ある特定のアクティビティに本質的に関連付けられていない進行中のタスクがあります。
で長時間実行するタスクを開始できstartService
、サービスは終了するまで強制終了されません。その間、Context#bindService
何かがそれにバインドされている限り、サービスを存続させます。
于 2013-01-11T18:52:51.863 に答える
2
アンドロイド並行プログラミングの一般的なルール
- UIスレッドから何かを実行して結果を返す必要がある場合は、それを使用するときに作成されたAsyncTaskを使用します
- 何らかの作業を行うための1回限りの要件がある場合(たとえば、Webサービスリクエストを投稿する場合)、AsyncTaskを使用します
- 単一のアクティビティ内で繰り返し何かを実行したいが、アクティビティが破棄された後に実行したり、別のサービスにデータを送信したりする必要がない場合は、スレッドを使用してください
- 複数のアクティビティと話す必要がある場合は、サービスを使用してください。
- 起動アクティビティが終了する前/後に実行する必要がある場合は、サービスを使用してください
于 2013-01-11T18:57:08.587 に答える