0

私はインターネットからストリームを再生していますが、ネットワーク操作などの長いプロセスは UI スレッドで処理する必要がないため、AsyncTask を使用しています。メインスレッドでは、videoView のいくつかの仕様を設定しました。

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.videoview);
    progressDialog = ProgressDialog.show(this, "Loading", "Please Wait", true, true);

    videoView = (VideoView) findViewById(R.id.surface_view);
    videoView.setVideoPath(ChannelPath);
    videoView.setMediaController(new MediaController(this));

    new LoadStream().execute("");
}

そして、AsyncTask でビデオを開始します。

private class LoadStream extends AsyncTask<String, Void, Void> {
    protected Void doInBackground(String... urls) {
            videoView.setOnPreparedListener(new OnPreparedListener() {
                public void onPrepared(MediaPlayer mp) {
                    videoView.start();
                    progressDialog.dismiss();
                }
            });
        return null;
    }
}

AsyncTask に videoView に関連するすべてのパーツを配置しようとしましたが、AsyncTask に setVideoPath と setMediaController を設定できませんでした。どの部分が正確に時間のかかる部分なのか疑問に思っています。私のコードは大丈夫ですか?または、UI スレッドでまだ長いプロセスを実行していますか?

4

3 に答える 3

2

これには非同期タスクを使用する必要はありません。ProgressDialog progressBar = ProgressDialog.show(context, "", "Loading Records, Please Wait..", true);このプログレスバーをメソッドでのみ使用して無視しonPreparedます。

于 2013-01-21T12:48:47.743 に答える
2

非 UI スレッドが UI で何かをしたい場合、そのスレッドは をRunnableUI スレッドに渡して実行できます。これを行うにはいくつかの方法があります。そのうちの 1 つは、非 UI スレッドが次のようなことを行うためのものです (微調整が必​​要です。実行中のコードを参照せずに入力しています)。

runOnUiThread(new Runnable() {
    void run() {
        // place UI code here
    }
});
于 2013-01-21T12:41:01.753 に答える
0

http://developer.android.com/reference/android/media/MediaPlayer.htmlも参照してください 。最初のprepare()ステップは時間がかかるため、別のスレッドで実行するか、prepareAsnyc呼び出しを使用する必要があります。setVideoPath()メソッドは、prepare()で使用されるパスのみを提供します。

コードを参照する場合(例: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/VideoView.java#VideoView.openVideo())サーフェスがまだ初期化されていない場合は何も行われないことがわかります。初期化されている場合でも、そのメソッドでprepareAsync()が呼び出されて重い作業が行われます。

于 2013-01-21T12:41:58.893 に答える