1

ListViewサーバーにアップロードする必要があるコンテンツを各行が表す場所があります。各行にはButton、サーバーへのアップロードを開始するためにインテント サービスを開始するボタンが含まれています。

最初に を押すとButtonインテント サービスが開始されますが、2 回目は新しいインテント サービスが開始されません。それはすべきですか?onClickListenerこれは私のコードですListView Button

Intent intent = new Intent(VaultActivity.this, Upload.class);
intent.putExtra(FILEPATH, vidoObject.filePath);
intent.putExtra(POSITION, position);
ListActivity.this.startService(intent);

私は何か間違ったことをしていますか?2 行目のボタンは、アップロードを開始するために新しい IntentService も作成しないでください。

4

1 に答える 1

3

IntentService は、実際には単なる作業キューです。

  • 最初の startService 呼び出しが行われると、サービスが開始され、ワー​​カー スレッドが作成され、配信されたインテントがワークキューに追加されます
  • ワーカー スレッドはキューから最初のインテントを読み取り、それを処理します
  • 最初のインテントの処理中に、2 番目のインテントが (2 番目の startService 呼び出しを介して) サービスに配信された場合、そのインテントはキューに追加されます (3 番目、4 番目なども同様)。
  • ワーカーは、ワーク キューが空になるまで実行し続けます。その後、サービスは停止します

したがって、2 番目の行のボタンが別のサービスを開始する可能性がありますが、それは最初のアップロードが既に終了している場合に限られます。

2 つのファイルを同時にアップロードする場合は、一度に 1 つのコマンドを処理するため、IntentService を使用できません。

于 2012-08-30T13:03:08.217 に答える