1

非同期タスクを使用せずに Android デバイスにファイルをダウンロードする方法があるかどうか知りたいと思いました。

私の問題は、アプリで非同期タスクを使用したいということです。この asyncTask 内でダウンロード関数を呼び出す必要がありますが、Android のドキュメントには、UI スレッドからのみ asyncTask を作成できると記載されています。

extends threadの代わりに を使用してスレッドを作成しようとしましたextends asyncTaskが、Android はまだ「UI スレッドのネットワーク例外」を出しました。

次のように機能する関数が必要です: ダウンロードした文字列を返す String downloadFile(String url){...} (私は xml ファイルをダウンロードしていますが、派手なものは何もありません)

4

2 に答える 2

2

そして、このasyncTask内でダウンロード関数を呼び出す必要があります

「この asyncTask の内部」が実際に「のdoInBackground()メソッドから」を意味するAsyncTask場合、「ダウンロード関数」(それが何であれ)は非同期である必要はありません。

しかし、Androidはまだ「UIスレッド例外のネットワーク」と言っていました

次に、ネットワーク I/O をdoInBackground()何らかのAsyncTaskバックグラウンド手段 (たとえば、Threadフォークした通常のもの) から実行していません。

于 2013-01-15T16:12:18.737 に答える
0

Android でファイルをダウンロードするサービスを利用できます。

Service は、ユーザーと対話せずに実行時間の長い操作を実行したい、または他のアプリケーションが使用する機能を提供したいというアプリケーションの要求を表すアプリケーション コンポーネントです。各サービス クラスには、そのパッケージの AndroidManifest.xml に対応する宣言が必要です。サービスは Context.startService() と Context.bindService() で開始できます。

サービスは、他のアプリケーション オブジェクトと同様に、ホスティング プロセスのメイン スレッドで実行されることに注意してください。これは、サービスが CPU 集中型 (MP3 再生など) またはブロック (ネットワークなど) 操作を行う場合、その作業を行う独自のスレッドを生成する必要があることを意味します。詳細については、プロセスとスレッドを参照してください。IntentService クラスは、実行する作業をスケジュールする独自のスレッドを持つ Service の標準実装として利用できます。

http://www.java2s.com/Code/Android/Network/FileDownloadService.htm

于 2013-01-15T16:11:52.670 に答える