0

我想在加载视频时显示进度对话框,我使用AsyncTask了但出现以下错误:

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

然后我尝试在其中使用 looper 仍然没有运气(看起来AsyncTask和 Looper 是两个根本不同的线程模型,它们不兼容)

我读过 using HandlerThread,但找不到任何简单的例子(我通常通过例子来学习)。请告诉我是否需要使用HandlerThread,如果需要,请提供一个使用示例,HandlerThread就像我们在AsyncTaskfor在后台处理任务。

这就是我正在做的事情:我只是想补充一点,我正在使用 Vitamio API 来播放 Flash。

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 只能在带有 Looper 的线程上操作。因此,您不应将 anAsyncTask用于此用例。AHandlerThread更适合。可以通过在设置 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_BARHIDE_PROGRESS_BARUI 线程。

于 2012-11-28T19:48:02.743 回答
1

我还没有尝试过,但我发现了这个进度对话框和媒体控制器的例子:

使用 videoview 流式传输视频

于 2012-11-29T18:17:31.500 回答