繁体   English   中英

Android在后台任务中设置视频URI

[英]Android Set Video URI In Background Task

我的应用程序不断告诉我,我在主线程上做的工作太多,并且如果在应用程序首次加载之前我没有等待足够长的时间才触摸UI,则会崩溃。 具体来说,似乎我正在等待的是将视频加载到videoView中,因为当我注释掉'myVideoView.setVideoURI'行时,它完全可以正常工作。

我已经设置了用于与服务器通信的asynctask,所以我想也许我可以使用asynctask在后台设置视频,然后在完成后隐藏进度条。

我尝试将整个视频加载代码放在asynctask的下面,但一直说“必须在UI线程上完成”。 当然,我可能只是误解了多线程的概念,但是如果有人可以帮助我阐明如何减少主线程的负担,那就太好了。 谢谢!

这是我的代码示例。 所有这些当前都在onCreate中。

myVideoView = (VideoView) findViewById(R.id.videoView);

    try {

        myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video));

    } catch (Exception e) {
        Log.e("Error", e.getMessage());
        e.printStackTrace();
    }

    myVideoView.requestFocus();

    myVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

        public void onPrepared(MediaPlayer mediaPlayer) {

                myVideoView.seekTo(0);

        }
    });

//空的异步任务

public class LoadVideo extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // DO SOMETHING BEFORE IT STARTS

    }

    protected String doInBackground(String... args) {
        // DO HEAVY LIFTING

        return null;

    }

    protected void onPostExecute(String file_url) {
        // DO SOMETHING AFTER IT FINISHES

    }

}

是的,有一个解决方案-使用rxJava多线程。 它允许在一个线程上创建请求,在另一个线程(例如,计算)上执行请求,并在主线程上处理结果。 这是处理多线程的现代方法。 我在当前项目中经常使用它。 查看评论https://stackoverflow.com/a/38002606/6175778

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM