たとえば、私たちは SomeActivity にいて、アクティビティには、あるディレクトリから別のディレクトリへのファイルの移動を呼び出すボタンがあります (ジョブと呼びましょう)。
BlackBerry では、次のことを行います。
- 「お待ちください...」というキャンセル不可のポップアップ(ダイアログ画面)をプッシュします。
- 仕事を遂行するスレッドを開始する
- スレッドの完了時にポップアップを閉じる
このアプローチにより、タスクが終了した後も同じ画面にとどまることが 99.99% 保証されます。ユーザーはポップアップを見て、ジョブの完了を待つだけです。デバイスの回転など、目的のワークフローを壊さないもの。
Android では状況が変わります。私のケースを解決するためにおそらく提供されている AsyncTask があることは知っています。それがどのように使用されるべきかの良い例さえあります。ただし、Activity インスタンスが存続する期間は保証されていないため、AsyncTask は onSaveInstanceState でキャンセルする必要があります (onRestoreInstanceState で再開します)。これは、AsyncTask を使用すると、開始したジョブを完全に実行できるという保証がないことを意味します。場合によっては、ユーザーを作成するための http 投稿要求を送信するときに、AsyncTask の再実行時に「このログインにユーザーが既に存在する」という問題に遭遇したくない場合があります。これが可能なのは、リクエストが送信されている間に AsyncTask が中断される可能性があるためです (そして、サーバーは実際に新しいユーザーを作成している間)、応答を受け取る前に AsyncTask がキャンセルされます。
上記の BB のような動作を取得するための Android 上の解決策はありますか?