ijkplayer的调用了shutdown,声音还是有

在使用ijkplayer时,调用shutdown方法后仍听到声音。原因是shutdown仅释放当前对象,若多次创建ijkplayer,需确保清除所有旧对象。解决办法是在创建新ijkplayer前先执行shutdown,确保旧实例被正确释放,防止声音在后台持续播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前要

今天遇到很坑爹的问题,就是明明已经调用了ijkplayer的shutdown,但是还是一直有声音呀,困扰了我很久。


问题解决方法

其实很简单的,shutdown只是释放当前的ijkplayer的对象,但是当你反复创建ijkplayer多个对象的时候,你就会,必须清除之前的ijkplayer对象。

这里写图片描述
上图中,有人很好奇为什么初始化的时候就执行销毁shutdown的操作,把self.player置空呢??,其实我的下面的方法会执行多次,我最开始时传入的live_url的值是空,目的就是个占位图吧了。也不是必须非得让它能够,只有当传进来的url不是空的时候,重新初始化,调用下面的方法

  • (void)initIJKPlayerViewWithUrl:(NSString *)live_url{}

有人会问直接替换url不就好了,为啥非得重新初始化一下ijkplayer呢?这里因为ijkplayer只提供了利用url初始化ijkplayer对象的方法,没有修改url的方法。
这里写图片描述

所以只能初始化,让之前的ijkplayer对象释放掉,重新初始化。我就是因为少了下面这句

[self.player shutdown];

之前没有释放掉,当我们退出控制器的时候,正常调用shutdown的时候,仅仅释放了最后一个创建的ijkplayer对象,这样我们销毁控制器的时候也一直有声音在后台播放,除非退出app的时候,声音才没有,毕竟app级别的退出的时候,系统肯定让app的处于休息状态,声音也就没有了,重新进去的时候还是有。


总结

最好的方法就是在创建前,先销毁掉ijkplayer的,保证创建之前是空的。shutdown!shotdown!!shotdown!!!

在Java中,当线程池调用了`shutdownNow()`方法后,它会中断所有正在执行的任务,并尽可能地停止接受新的任务。这个方法返回一个包含未完成任务的列表`Future<?>[]`。 如果你想恢复线程池并允许其接收新任务,你需要做以下步骤: 1. 首先,检查`shutdownNow()`方法是否真的中断了任何任务,可以查看返回的`Future<?>[]`数组,如果数组为空,说明没有工作需要中断。 ```java List<Runnable> interruptedTasks = new ArrayList<>(); for (Future<?> future : executor.shutdownNow()) { if (!future.isCancelled() && !future.isDone()) { interruptedTasks.add(future); } } ``` 2. 对于那些还未完成的任务,你可以选择手动重试它们,或者处理错误。这通常涉及到获取`InterruptedException`异常,因为被中断的线程可能会抛出这个异常。 ```java for (Runnable task : interruptedTasks) { try { task.run(); // 如果需要重试 } catch (InterruptedException e) { Thread.currentThread().interrupt(); // 重新设置中断标志 e.printStackTrace(); } } ``` 3. 接下来,调用`awaitTermination(long timeout, TimeUnit unit)`来等待当前剩余的任务完成。之后,如果你希望再次开始接受新任务,可以调用`restart()`方法(虽然不是标准的Java API,但在一些自定义的线程池实现中可能出现),或者简单地创建一个新的线程池实例。 请注意,`shutdownNow()`后的线程池并不一定会回到初始状态,因为它可能已经失去了提交新任务的能力。通常,在这种情况下,最好的做法是不再使用那个线程池,而是创建一个新的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值