私はかなりトリッキーな状況にあり、最適なデザインを決定しようとしています。基本はこれです:
- 私は電子メールと同様のインターフェースを備えたメッセージングシステムを設計しています。
- ユーザーが添付ファイルのあるメッセージをクリックすると、そのメッセージのテキストと、追加の添付ファイルがあることを示すペーパークリップを表示するアクティビティが生成されます。
- この時点で、添付ファイルのプリロードを開始して、ユーザーが添付ファイルをクリックしたときに、より速く読み込まれるようにします。
- 現在、ユーザーが添付ファイルをクリックすると、ダウンロードが完了するまで読み込みダイアログが表示され、ダウンロードが完了すると、別の添付ファイルビューアアクティビティが読み込まれ、bmpバイト配列が渡されます。
- 添付ファイルを永続ストレージに保存したくありません。
私が抱えている問題は、回転やホームボタンの押下などをサポートすることです。ダウンロードは現在、スレッドとハンドラーのセットアップで行われます。
これの代わりに、フローを次のようにしたいと思います。
- ユーザーは以前と同じようにメッセージをロードし、プリロードは以前と同じように添付ファイルを開始します(ユーザーには表示されません)。
- ユーザーが添付ファイルのリンクをクリックすると、添付ファイルビューアのアクティビティがすぐに生成されます。
- ダウンロードが完了すると、画像が表示されます。そうでない場合は、ダイアログが完了して表示できるようになるまで、このアクティビティにダイアログが表示されます。理想的には、ダウンロードが再開されないことに注意してください。そうしないと、プリロードでサイクルが無駄になります。
明らかに、ダウンロードを継続し、任意に結合されたアクティビティにコールバックできる永続的なバックグラウンドプロセスが必要です。IntentServiceは、バックグラウンドスレッドで動作し、サービス(UI以外)のライフサイクルを備えているため、私のニーズにほぼ適合しているようです。しかし、それは私の他のニーズのために機能しますか?
私がやりたいことの一般的な実装は、呼び出し元のアクティビティからメッセンジャーを取得して、メッセージオブジェクトを呼び出し元のスレッドのハンドラーに送り返すことができることに気付きました。これはすべて問題ありませんが、発信者のアクティビティが停止または破棄され、現在アクティブなアクティビティ(添付ファイルビューア)が表示されている場合はどうなりますか? 新しいアクティビティを実行中のIntentServiceに動的にバインドして、新しいアクティビティにメッセージを送り返す方法はありますか?
もう1つの質問は、Messageオブジェクトに関するものです。このパッケージで任意の大きなデータを送り返すことはできますか?たとえば、「ファイルがダウンロードされました」というメッセージを返送するのではなく、ダウンロードしたファイル自体のバイト配列をディスクに書きたくないので返送する必要があります(そうする必要があります)。
私が望む行動を達成するためのアドバイスは大歓迎です。私はAndroidを長い間使用していません。特に、向きの変更やホームボタンの押下に関しては、アクティビティのライフサイクル全体で非同期プロセスを最適に処理する方法に戸惑うことがよくあります...