2016-06-17 7 views
1

URLからファイルをダウンロードする方法を知っています。使用されたHTTPクライアントは、ファイルをダウンロードし、実行可能ファイルにラップします。私は、複数のファイルを並行してダウンロードできるようにするために、実行可能ファイルのインスタンスをさらに作成し、ExecutorServiceに追加することができます。Android - 並行してファイルをダウンロードしてDBに入力してください

私は既にSQLite DBで動作するフレームワークを作成しています。 getwritabledにASyncタスクを使用して、DBにダウンロードされたファイルに関連するいくつかのプロパティを追加します。

どうすればいいですか?ユーザーが複数のファイルをダウンロードできるようにする方法と、donwloadを完了してDBエントリを追加して、非同期でユーザーに自由にアクセスできるようにする方法です/

実行ファイル/ run()内のファイルとともにhttpclientがファイルを返すと、非同期タスクを開始できますか?いいえ、他のアクティビティに移動してください(ログアウト時に要件を処理する必要はありません)。またはrunnableがすでに1つのスレッドを落としていて、それから別のものを非同期タスクの形にしているので、それは悪い習慣ですか?他の提案はありますか?

残念ながら私はgit/etcの誰かが提供する外部ライブラリを使用できません。

答えて

0

私の実行可能ファイル/ run()の中で、httpclientがファイルを返した後で非同期タスクを開始できますか?またはrunnableがすでに1つのスレッドを落としていて、それから別のものを非同期タスクの形にしているので、それは悪い習慣ですか?他の提案はありますか?

ファイルをダウンロードしてデータベースに書き込む作業は、2つの独立した操作です。両方とも同じAsyncTaskまたはRunnable内で行うべきではありません。しかしそれはうまくいくだろうが、これは悪い建築だと思う。

通常、上記のエグゼキュータを持つクラスのダウンロードマネージャのようなものがあります。コントローラーからこのダウンロードマネージャー(アクティビティーやフラグメントなど)を呼び出し、コールバックを受信すると、データベースにデータを書き込むバックグラウンドタスクを開始することができます。それは何でもかまいません:AsyncQueryHandlerRunnableAsyncTaskなどあなたのユースケースに適したソリューションを選択してください。

これは、限り、あなたは、このようなServiceとしてUIに依存しないコンポーネントを使用すると、まったく問題はありません

/(彼がログアウトするときの要件を処理するために持っていけません)。ファイルをダウンロードしてデータベースに書き込むためのUIは必要ありません。

+0

私はそれが悪いアーキテクチャだと分かっていましたが、より良い解決策は考えられません。あなたが提案したものは、2つのasynctaskを分けておいてください。最初のファイルが完成したら、ファイルがダウンロードされたことを示唆し、次のファイルをダウンロードしてDBエントリにします。それも私の最初の考えでした。 しかし、より複雑なものが入ってきました。ユーザーは複数のファイルを選択することができます(オフラインでファイルを保存するDropboxのようなものですか?)、ファイルがダウンロードされている間に、そのアクティビティから移動できます滞在する)その場合、私は私が第1のオペレーションが完了した後に電話を受けるとは思わない。 – XConfusion

+0

それも効くだろう。しかし、AsyncTaskはアンドロイドコンポーネントではないことを覚えておいてください。これはスレッドのラッパーです。したがって、システムが低メモリで実行されている場合、アンドロイドはバックグラウンド時にアプリを殺す可能性が高くなります。これが懸念される場合は、アプリの優先度を高めるサービスを使用してください。 –

+0

待って、ちょっと混乱します。 (メモリ部分を除いて、思い出させるためにありがとう)。 あなたはダウンロードする非同期を開始することができ、それがpostexecuteで、別のAsyncを起動してDBエントリを作成できると言っていますか?この非同期が開始されたアクティビティからユーザが離れても、これはすべて動作しますか? 1)ユーザーの操作から離れてアクティビティが発生することはありませんか? 2)私はこれが正解だと思いますが、まだ...私は5つのファイルを同時にダウンロードするAsyncタスクのインスタンスを起動できますか? – XConfusion

関連する問題