2011-03-20 11 views
1

私のアプリはファイル(5〜12MBのファイル)をダウンロードし、外部ストレージからアクセスします。 WiFiに接続していないときにダウンロードに1〜2分かかりますので、ユーザーがアクティビティに入る前にダウンロードを開始して、待つ必要はありません。アクティビティ間の共有asynctask

AsyncTaskが最善の方法だと思われましたが、将来のアクティビティ(私の理解には)がAsyncTask自体の進捗状況をチェックできないことを認識しました。ファイルが読み込み可能かどうかを確認します。ただし、タスクがまだ実行されているか、ネットワーク接続が失われていて、再試行する必要がある場合はどうなりますか?

AsyncTaskを無差別に再作成し、すぐに終了する場合はファイルを再度ダウンロードするのは無駄です。

将来のアクティビティからAsyncTask(特にそのステータス)にアクセスする方法はありますか、それとももっと良いパラダイムがありますか?

答えて

1

必要なものをバックグラウンドでダウンロードするサービスを作成することができます。 終了したら、コンテンツが準備ができていることをインテントでアプリに伝え、stopSelf()を介してサービスを停止できます。したがって、あなたのダウンロードは、常にホーム画面でも続きます。 通知を作成してユーザーに通知し、彼にキャンセルの機会を与えるようにしてください。 :)

編集:もちろん、サービス内のタスクを使用することができます。サービスは自分のスレッドを生成しないので、とにかく良いアイデアかもしれません。

+1

'Service'のバックグラウンドスレッドについては、' IntentService'を考慮してください。 – CommonsWare

+0

私はIntentServiceを見ていますが、サービスの状態を確認する方法はありません。私はそれが通知を送信することができますが、それがまだ実行されているかどうかを確認するためにUIスレッドのチェックをどのように持っていますか? – Turnsole

2

この種の目的でアプリケーションを設計する方法については、説明があります。Developing Android REST client applications

+0

リンクが壊れています。 – powder366

+0

@ powder366 linkが修正されました。指摘してくれてありがとう。 –

関連する問題