业务场景:当我们在切换视频播放的途中,后台去调用http请求,就导致了主线程被阻塞,页面卡顿的现象,尝试出来的解决方式是开启一个后台线程去加载视频,然后在主线程中更新UI文章来源:https://www.toymoban.com/news/detail-604543.html
一、直接上封装方法
void switchVideo(String videoFile){
mVideoView2 = findViewById(R.id.video_view);
// 在主线程中执行异步任务,加载视频
new LoadVideoTask().execute(videoFile);
}
//在后台线程中加载视频资源,然后在主线程中更新UI并播放视频。
private class LoadVideoTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// 在后台线程中加载视频
int resId = getResources().getIdentifier(params[0], "raw", getPackageName());
final String videoPath = "android.resource://" + getPackageName() + "/" + resId;
return videoPath;
}
@Override
protected void onPostExecute(String videoPath) {
// 在主线程中更新UI,设置视频路径并播放
mVideoView.setVideoURI(Uri.parse(videoPath));
mVideoView.start();
}
}
二、代码解释
这段代码是一个私有内部类 LoadVideoTask ,继承自 AsyncTask ,用于在后台线程中加载视频并在主线程中更新UI并播放视频。具体解释如下:文章来源地址https://www.toymoban.com/news/detail-604543.html
- doInBackground(String… params) :这是 AsyncTask 的一个方法,用于在后台线程中执行耗时操作。在这个方法中,它首先通过 getResources().getIdentifier(params[0], “raw”, getPackageName()) 获取指定名称的视频资源ID,然后构建视频的路径,并将路径返回。
- onPostExecute(String videoPath) :这是 AsyncTask 的另一个方法,在后台操作执行完毕后,在主线程中执行。在这个方法中,它使用 mVideoView2.setVideoURI(Uri.parse(videoPath)) 将视频路径设置给 mVideoView2 ,然后调用 mVideoView2.start() 开始播放视频。
到了这里,关于【Android】主线程切换播放视频时,调用http请求,导致页面卡顿问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!