如何在videoview中使用处理程序

时间:2013-07-03 07:38:02

标签: android multithreading handler android-videoview

我自己学习Android多线程并使用此powerpoint作为主要资源:http://grail.cba.csuohio.edu/~matos/notes/cis-493/lecture-notes/Android-Chapter13-MultiThreading.pdf

我正在尝试Handler post方法。在幻灯片38中,它提到需要前景可运行且背景可以运行。

如果我希望我的前景可以运行视频视图,我是否需要将所有视频视频代码放入try / catch中?或正在创建视频视图本身创建自己可运行的前景? 还有另一种方法可以解决这个问题吗?

我感谢任何帮助,因为我对java和android都很陌生。

2 个答案:

答案 0 :(得分:1)

首先查看前景vs背景android文档以及活动的工作原理。您不需要任何类型的处理程序来使视频视图起作用。视频观看次数。

然后看看处理程序是什么以及它们如何在这里工作 - http://developer.android.com/reference/android/os/Handler.html

为您的任务 - 在您的活动中编写一个单独的处理程序,负责您的视频观看 - 基本上在视频播放时听取时间,然后在播放时间与您想要弹出烤面包的时间相匹配时弹出。

Handler handler = new Handler();
...
handler.post(timefortoast);
....

int curVideoPosition;
    private final Runnable timefortoast= new Runnable() {
        public void run() {
            try {
                if (video.isPlaying()) {
                    cumulativeTimeSpent += 1;
                }

                // prepare and send the data here..
                curVideoPosition = video.getCurrentPosition();
//Match cumulative time spent and curvideoposition to pop up whatever you want, toast or whatever in the middle of the video

然后在ondestroy

中分离回调
handler.removeCallbacks(timefortoast);

答案 1 :(得分:1)

您根本不需要使用Handlers / Threads来实现VideoView - 这应该像普通视图一样在UI线程上运行。

从您的评论中我理解这是一个学习练习,因此您可以实施一个Runnable任务来执行您需要它执行的任务。它与你的VideoView没有关系,只是你想要单独执行的事情。

例如:

private Runnable task = new Runnable() { 
    public void run() {
        Toast.makeText(getApplicationContext(), "HELLO!", Toast.LENGTH_LONG).show();
        videoView.stopPlayback();
    }
};

然后你可以通过以下方式来打电话:

Handler handler = new Handler()
handler.postDelayed(task, 5000);

task中的代码将在调用handler.postDelayed()

后执行5秒

我建议你让VideoView正常工作,然后添加你的处理程序。