安卓网页视频抓取工具(继承IntentService服务子类中进行主线程中播放黑屏问题的方法)

优采云 发布时间: 2022-01-31 14:17

  安卓网页视频抓取工具(继承IntentService服务子类中进行主线程中播放黑屏问题的方法)

  这个视频播放器不能播放视频,有时候黑屏问题是我最近在这个项目中遇到的最头疼的问题,因为不知道是哪个链接出错了,在网上也找不到任何线索。最后发现是因为我在manifest里打开页面的时候,加了硬件加速,是加了android:hardwareAccelerated="true"引起的。移除视频后,视频可以正常播放。我认为应该在后台完成。前端够用了,但有时需要我们自己获取。一般在实际开发中,我们会获取不止一个,比如视频列表的所有视频缩略图。在做这个需求的时候,我发现获取的过程是一个耗时的过程。直接在主线程进行操作的时候会很卡,还会出现程序崩溃的问题,所以我认为这个过程是在子线程中进行的,把得到的图片位图返回给UI线程,获取并加载一个。体验问题也好很多。下面是具体的实现过程: 这里,耗时的任务是在IntentService服务的子类中进行的,和线程中的操作原理是一样的。一、创建MyIntentService,并创建UpdateUI接口,页面回调数据使用二、在onHandleIntent中获取图片URL后,通过MediaMetadataRetriever获取位图返回页面 并且会出现程序崩溃的问题,所以我认为这个过程是在子线程中进行的,将获取到的图像位图返回给UI线程,获取并加载一个。体验问题也好很多。下面是具体的实现过程: 这里,耗时的任务是在IntentService服务的子类中进行的,和线程中的操作原理是一样的。一、创建MyIntentService,并创建UpdateUI接口,页面回调数据使用二、在onHandleIntent中获取图片URL后,通过MediaMetadataRetriever获取位图返回给页面 并且会出现程序崩溃的问题,所以我认为这个过程是在子线程中进行的,将获取到的图像位图返回给UI线程,获取并加载一个。体验问题也好很多。下面是具体的实现过程: 这里,耗时的任务是在IntentService服务的子类中进行的,和线程中的操作原理是一样的。一、创建MyIntentService,并创建UpdateUI接口,页面回调数据使用二、在onHandleIntent中获取图片URL后,通过MediaMetadataRetriever获取位图返回页面 获取并加载一个。体验问题也好很多。下面是具体的实现过程: 这里,耗时的任务是在IntentService服务的子类中进行的,和线程中的操作原理是一样的。一、创建MyIntentService,并创建UpdateUI接口,页面回调数据使用二、在onHandleIntent中获取图片URL后,通过MediaMetadataRetriever获取位图返回页面 获取并加载一个。体验问题也好很多。下面是具体的实现过程: 这里,耗时的任务是在IntentService服务的子类中进行的,和线程中的操作原理是一样的。一、创建MyIntentService,并创建UpdateUI接口,页面回调数据使用二、在onHandleIntent中获取图片URL后,通过MediaMetadataRetriever获取位图返回页面

  package ui.zlz.fragment;

import android.app.IntentService;

import android.content.Intent;

import android.graphics.Bitmap;

import android.media.MediaMetadataRetriever;

import android.os.Message;

import android.support.annotation.Nullable;

import java.util.HashMap;

/**

* created by yezhengyu on 2019/1/21 09:26

*/

public class MyIntentService extends IntentService {

public static UpdateUI updateUI;

public static void setUpdateUI(UpdateUI updateUIInterface){

updateUI=updateUIInterface;

}

/**

* Creates an IntentService. Invoked by your subclass's constructor.

*

*/

public MyIntentService() {

super("MyIntentService");

}

@Override

public void onCreate() {

super.onCreate();

}

@Override

public void onStart(@Nullable Intent intent, int startId) {

super.onStart(intent, startId);

}

@Override

public int onStartCommand(@Nullable Intent intent, int flags, int startId) {

return super.onStartCommand(intent, flags, startId);

}

@Override

public void onDestroy() {

super.onDestroy();

}

public interface UpdateUI{

void updateUI(Message message);

}

@Override

protected void onHandleIntent(@Nullable Intent intent) {

String image = intent.getStringExtra("image");

int index = intent.getIntExtra("index", 0);

MediaMetadataRetriever retr = new MediaMetadataRetriever();

retr.setDataSource(image, new HashMap());

Bitmap bitmap = retr.getFrameAtTime();

Message msg1 = new Message();

msg1.what = index;

msg1.obj = bitmap;

if(updateUI!=null) {

updateUI.updateUI(msg1);

}

}

}

  三、获取图片数据后启动MyIntentService,页面需要实现UpdateUI接口

<p>Intent intent = new Intent(getActivity(), MyIntentService.class);

for (int i = 0; i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线