0

ビデオのロード中に進行状況ダイアログを表示したいのですが、使用AsyncTaskしましたが、次のエラーが発生しました。

cant create handler inside thread that has not called looper.prepare

それから私はその中でルーパーを使おうとしましたが、それでも運がありません(AsyncTaskルーパーは2つの根本的に異なるスレッドモデルであり、互換性がありません)

を使って読んだHandlerThreadのですが、簡単な例が見つかりませんでした(通常は例で学びます)。使う必要があるかどうか教えてください。必要な場合は、私たちと同じように使用例を教えてHandlerThreadください。バックグラウンドでタスクを処理します。HandlerThreadAsyncTask

それが私がしていることです。フラッシュを再生するためにVitamioAPIを使用していることを追加したかっただけです。

class WaitTask extends AsyncTask<Integer, Void, Void> {

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog (TvProg.this);
        progressDialog.show();
    }


    @Override
    protected Void doInBackground(Integer... params) {
        videoView.setMediaController(new MediaController(TvProg.this));
        return null;
    }

    @Override
    protected void onPostExecute(Void unused) {
        progressDialog.dismiss();
    }

}
4

4 に答える 4

1

ProgressDialog内部を作成し、実行後に作成しasynctask's preexecute()ますdismiss

于 2012-11-28T10:15:43.320 に答える
1

このようにしてください。

public MyTask(Context context) {
    this.context = context;
}

@Override
protected void onPreExecute() {
        progressDialog = ProgressDialog.show(context, "", msg, true);

}

/* 
 * @see android.os.AsyncTask#doInBackground(Params[])
 */
@Override
protected String doInBackground(String... arg0) {
    //
}

@Override
protected void onPostExecute(final String result) {
        progressDialog.dismiss();

    }
}
于 2012-11-28T10:19:12.780 に答える
1

問題は、MediaPlayerがルーパーを備えたスレッドでのみ動作できることです。したがって、AsyncTaskこのユースケースにはを使用しないでください。AのHandlerThread方がはるかに適しています。以下のサンプルコードに示すように、videoViewをセットアップする前後に、メッセージをUIスレッドに送り返すことでプログレスバーを制御できます。

mMyBgThread = new HandlerThread("HandlerThread");
mMyBgThread.start();

mBgHandler = new Handler(mMyBgThread.getLooper()) {
    public void handleMessage(Message msg) {
        Message uiMsg = mUiHandler.obtainMessage(SHOW_PROGRESS_BAR);
        mUiHandler.sendMessage(uiMsg);

        // Setup videoView          

        uiMsg = mUiHandler.obtainMessage(HIDE_PROGRESS_BAR);
        mUiHandler.sendMessage(uiMsg);
    }
};

SHOW_PROGRESS_BARこれでHIDE_PROGRESS_BAR、UIスレッドを処理するだけで済みます。

于 2012-11-28T19:48:02.743 に答える
1

試したことはありませんが、進行状況ダイアログとメディアコントローラーの次の例を見つけました。

videoviewを使用したスト​​リーミングビデオ

于 2012-11-29T18:17:31.500 に答える