0

私はまだコーディングを始めていません。そこにあるライブラリと、API が最初に提供できるものを把握しようとしています。

アプリを起動する前に、多くのリソースをダウンロードする必要があります。基本的に、「SplashSreen」と、ダウンロード中のファイルを示すプログレスバーと、x 個のリソースのダウンロードの進行状況全体を示すプログレスバーを用意します。

このテーマに関するいくつかの議論とチュートリアルを見た後、AsyncTask がその仕事をするように思えます。ただし、キュー全体ではなく、現在ダウンロードされている「オブジェクト」の現在の進行状況のみを表示できます。

誰かがここで私を助けてくれませんか?

TBH; このシナリオで AsyncTask が探しているものであるかどうかさえわかりません。基本的に、リソースをダウンロードしてキューに入れ、キュー全体の進行状況と、特定の時間にダウンロードされているリソース (リソースの名前) を知らせてくれるものが必要です。

ありがとう!

4

5 に答える 5

2

もちろん、AsyncTask仕事はできます。進行状況を表示する asyncTask にすべてのファイルを入れるだけです。

class InitTask extends AsyncTask<Void, Integer, Boolean> {
    private List<String> mNbFiles;

    public InitTask(List<String> filesURL)
    {
        super();
        mFilesURL = filesURL;
    }

    @Override
    protected void onPreExecute() {
        //show and init your progress bar here...
        super.onPreExecute();
    }

    @Override
    protected Boolean doInBackground(Void... params) {

        for(int i = 0 ; i < mNbFiles.size() ; ++i){
            //download one file ...
            publishProgress(i);
        }
    }
}

これがお役に立てば幸いです。質問があればコメントしてください。

于 2012-08-06T10:09:27.363 に答える
1

AsyncTask は、実行時間の長いダウンロードに使用すべきものではありません。AsyncTasks は実際には UI に関するものであり、ユーザーが画面から移動したり、画面を回転させたりすると、ダウンロードが強制終了されることを知っておくことが重要です。

ダウンロードを実行するにはサービスを使用する必要があるため、すべてのダウンロード コードを IntentService に入れ、ある種の永続ストレージを更新して進行状況を示します (共有設定のいくつかの変数で問題ありません (現在の状態を示すには on を、もう 1 つは現在の状態を示すには))。進行状況を示します))。

その後、アクティビティを使用してサービスを起動し、永続ストレージまたはインテントを介して渡されたコールバックを介してダウンロードの進行状況を監視できます (永続ストレージがおそらく最も簡単です)。

于 2012-08-06T10:09:41.100 に答える
0

AsyncTask はまさにあなたが探しているものです。API に応じてタスクの量をキューに入れることができます。キュー サイズのゲッターがある場合は Asynctask の実装を確認しますが、そうでない場合は asyncTask のリストを作成して更新できます終わったら。

15 個のタスクをキューに入れる場合、プログレス バーを最大 15 に設定し、onPostExecute ごとにプログレス バーをインクリメントすることができます :)

後でキューを確認して、回答を編集します。

よろしく。

于 2012-08-06T10:03:47.820 に答える
0

AsyncTask はまさにあなたが探しているものです。現在のオブジェクトに対してのみ更新できるというのは、実際には正しくありません。つまり、現在の AsyncTask を更新できるということです。

以下、onProgressUpdate方法です。

protected void onProgressUpdate(Integer... values) {
    super.onProgressUpdate(values);
    Log.i(logTag, "onProgressUpdate: " + String.valueOf(values[0]));

    View view = getView();
    if(view != null)
        ((ProgressBar)view.findViewById(R.id.progressBar)).setProgress(values[0]);
}

任意の数の整数を引数として取ります。あなたのpublishProgressメソッドでは、onProgressUpdate(itemProgress, totalProgress)2 つの異なるプログレス バーを呼び出して、それに応じて更新することができますonProgressUpdate

ですべてのダウンロードをdoInBackground行い、進行状況バーを更新するたびに、publishProgress進行状況の int を に渡す呼び出しを行いますonProgressUpdate

于 2012-08-06T10:08:57.980 に答える
-1

AsyncTask doInBackground()メソッドに、すべてのオブジェクトをダウンロードし、ハンドラーを使用してプログレスバーの更新を投稿するコードを配置します。この例を見てください:

http://developer.android.com/reference/android/widget/ProgressBar.html

次のコードはdoInBackground()内に入ります。

while (mProgressStatus < 100) {
                 mProgressStatus = doWork();

                 // Update the progress bar
                 mHandler.post(new Runnable() {
                     public void run() {
                         mProgress.setProgress(mProgressStatus);
                     }
                 });
}
于 2012-08-06T10:14:52.317 に答える