0

これを行う簡単なアプリを作成する必要があります:-実行するたびに、Webから20 pdfのようにダウンロードしようとします(サーバーは毎分更新されるため、同じ場所から毎回)-主なアクティビティはPDFのリスト。ダウンロードされたファイルについて、1つのディレクトリがスキャンされます。ある場合は、それらが一覧表示されます。

問題は、「バックグラウンドで」ダウンロードする必要があるが、「終わりのないサービス」ではダウンロードする必要がないことです。

アプリケーションの起動時にサービスを起動することを考えています。サービスがPDFをダウンロードしようとしている間、主なアクティビティは方向をスキャンしてPDFを表示します。

初めてすべてのPDFがまだダウンロードされていない場合は、問題ありません。

これを実行しようとしましたが、サービスがアプリを「ロック」しているため、アプリが応答していません。

サービスが別のスレッドにぶつかると思っていました。本物ですか?

だから:アクティビティをスムーズに実行するための最良の解決策ではありませんが、バックグラウンドで「何か」が大量のファイルをダウンロードしますか?

4

2 に答える 2

3

Android-AsyncTaskまたはAndroid-IntentServiceは、要件に最適です。

AsyncTaskを使用する場合は、ダウンロードを続行している間、アクティビティUIを定期的に更新できます。

于 2012-09-02T11:53:52.020 に答える
0

インテントサービスの概念を深く確認することをお勧めします。http://developer.android.com/reference/android/app/IntentService.html

一方で、それはサービスです。つまり、ユーザーがアプリから[ホーム]を押したときに、システムがダウンロードを強制終了することはおそらくないということです。しかし、そうではありません

終わりのないサービス

ダウンロードが完了した直後に終了するため(これ以上タスクが起動されない場合)。

そしてあなたの質問に答える:

サービスが別のスレッドにぶつかると思っていました。本物ですか?

これは100%真実ではありません。Service.onCreate()で重いタスクを使用startServiceして実行すると、UIメインスレッドで実行されているため、アプリケーションがハングします。ただし、IntentServiceを拡張する場合は、オーバーライドするための便利なメソッドがありますonHandleIntenthttp://developer.android.com/reference/android/app/IntentService.html#onHandleIntent(android.content.Intent))。別のスレッドで実行されます。IntentServiceがあなたに代わってそれを行います。

ご不明な点がございましたらお知らせください。

于 2012-09-02T12:08:38.513 に答える