0

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

我正在尝试 Handler post 方法。在幻灯片 38 上,它提到需要有一个可运行的前台和可运行的后台。

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

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

4

2 回答 2

1

首先查找前台与后台 android 文档以及活动的一般工作方式。您不需要任何类型的处理程序来工作视频视图。视频视图是视图。

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

对于您的任务 - 在您的活动中编写一个单独的处理程序,像这样负责您的视频视图 - 基本上在视频播放时监听时间,然后在播放时间与您想要弹出 toast 的时间匹配时弹出。

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);
于 2013-07-03T08:07:14.390 回答
1

您根本不需要使用Handlers/Threads来实现 a 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将在 5 秒后执行handler.postDelayed()

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

于 2013-07-03T08:07:31.990 回答