当前位置:首页 » 文件管理 » fragment缓存

fragment缓存

发布时间: 2024-10-24 08:00:14

‘壹’ Android Fragment怎么强制销毁

具体方法如下:
一,可以销毁的。创建fragment时,需要配置adapter,adapter继承FragmentStatePagerAdapter 在此类中有重写destroyItem,可以控制要销毁哪些fragment了。
二,如果用的是tabhost + viewpager ,viewpager 默认就缓存了显示页的一前一后。就算是setOffscreenPageLimit(0)设置成0的话即是懒加载,但是默认的support-v4包会把默认值改为1的,也就是至少默认会加载下一页,要想完全不加载,只有修改support-v4的源码,然后重新打jar包调用了。

‘贰’ 浅浅地优化下视频流播放体验

作者:唐子玄

本文将解决以下问题:如何播放单个视频?如何将播放器模块化?如何实现视频流?如何优化视频播放内存?如何优化视频流播放体验?

播放视频ExoPlayer 基本使用

市场上有名的播放器有:ExoPlayer、ijkplayer、GSYVideoPlayer,其中ExoPlayer体积最小且GitHub更新频繁,故选用。

ExoPlayer播放视频仅需6行代码,styledPlayerView需在xml中定义。

若想不重复下载已播放视频,需开启文件缓存。

若需自定义缓冲参数,可实现。

若想监听播放器状态,可设置监听器。

若要播放m3u8视频,需添加依赖并使用特定代码。

视频格式选择

纠结于mp4和m3u8,最终选择m3u8,原因在于m3u8更适合分段式流媒体。

播放器封装

定义接口,屏蔽播放器实现差异,便于上层操作。

接口中包含播放状态的抽象。

ExoPlayer实现此接口,作为单独库player-exo。

在player-pseudo中定义构建VideoPlayer的抽象行为。

player-exo中基于ExoPlayer实现。

player-manager作为业务层使用播放器的入口,依赖player-pseudo。

通过gradle实现依赖倒置,上层不依赖下层具体实现,中间层作为抽象层。

视频流

解决单个视频播放问题后,介绍构建视频流。

视频流如抖音纵向列表,每个表项为全屏视频。

使用ViewPager2+Fragment实现。

Fragment实现代码。

在FragmentStateAdapter中构建Fragment实例。

为业务界面的ViewPager2设置适配器。

完成简单视频流。

预加载及其原理

使用ViewPager2.offscreenPageLimit实现预加载,设置参数后,视窗大小扩大,加载即将进入视窗的视频。

若设置参数为1,则视窗上下各扩大一格,当前屏幕停留的视频旁,下一个视频已被预加载。

ViewPager2基于RecyclerView实现,内部自定义LinearLayoutManager。

额外布局空间由calculateExtraLayoutSpace方法计算并用于加载更多表项。

有限的解码资源

使用上述代码实现视频流,不断下翻视频时,会加载不出来,因无法创建音轨。

手机音轨资源有限,每次构建ExoPlayer实例都会重新申请资源。

在Fragment生命周期方法onDestroy()中调用release()释放播放器资源。

播放器生命周期控制

本以为视频滑动时,播放器构建及回收时机为表项移入视窗构建,移出视窗销毁。

ViewPager2内部机制不同,会缓存比预期更多的Fragment。

修改ViewPager2源码,调整FragmentStateAdapter,使得播放器生命周期不再基于Fragment生命周期,改为基于视图滚动。

播放器数量控制

使用播放器池管理播放器实例数量,避免内存抖动。

重构接口,视图和播放器分离,播放器池通过循环数组复用。

播放器池长度需大于视窗大小,防止播放器实例复用失败。

滑动体验

复用播放器实例提升滑动流畅度,滑动动画通过调整插值器改进。

无缝播放体验

在松手时暂停上一个视频,播放下一个视频,避免视觉卡顿。

‘叁’ c#如何使用缓存提高程序效率

缓存的技术应用应该是非广泛的。而它的作用也是为了提高系统或者网站的执行效率。下面是四种常见的缓存技术:
一.OutputCaching
由于IIS的一些特性,默认情况下OutputCache是打开的,但是要对某些请求进行缓存,还需要开发者进行定制,而且默认情况下,Output Cache 会被缓存到硬盘上,我们可以通过修改DiskCacheable的属性来设置其是否缓存,还可以通过Web config里配置缓存文件的大小。

<%@ OutputCacheDuration="3600" VaryByParam="state" DiskCacheable="true" %>
一般用硬盘缓存是考虑到页面送显的数据比较大,相对内存缓存来说,它的容量大,但是访问速度慢点,如果把周期设太短,使用硬盘缓存的效率就不大好。对于Output Cache的定制,有两种方法,一种是基于底层的API技术,一种是基于高层的@OutputCaching:

1.基于高层的@OutputCaching

A.由参数改变缓存内容:有些时候我们需要根据用户的请求来生成页面,但是用户的请求只有有限的几种组合,这个时候就可以根据用户请求来生成几种缓存页面,来进行缓存。

<%@ OutputCache Duration ="60" VaryByParam = "state" %>
<asp:sqlDataSourceID="SqlDataSource1" runat="server">
<SelectParameters>
<asp:QueryStringParameter Name="state"QueryStringField="state" DefaultValue="CA" />
</SelectParameters>
</asp:SqlDataSource>
B.回调缓存:可以针对每个请求在页面中插入动态的部分,以弥补单独使用静态缓存的不足:
动态的部分用Substitution控件,Substitution控件是一个容器

<asp:SubstitutionID="Substitution1" runat="server" MethodName =""/>
MethodName 里面放入要调用的方法内容。
2. 使用API定制缓存:
通过设置System.Web.HttpCachePolicy属性来进行配置

<%@ OutputCache Duration="60"VaryByParam="none" %>
就可以写成

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);

二.FragmentCaching
作为Output的缓存的附加功能,还提供一种缓存技术,专门用于缓存用户控件。在用户控件中设置:

<%@ OutputCache Duration="60"VaryByParam="none" %>

但在引用用户控件的页面不设置缓存。这样的话,页面中除了用户控件是静态的,其他都是动态的。
缓存用户空间同样还可以使用控件作为参数来源。通过指定控件作为缓存控件的数据来源,可以达到缓存控件数据的目的,和上面一样。

三.DataCaching
Asp.net提供了一种非常快捷的方法进行数据库缓存,用户可以非常简单方便的对页面变量进行缓存。并以此提高程序效率。一个页面变量的缓存生命周期与应用程序的缓存生命周期相同
实现是把数据放在Cache中,如:

source = new DataView(ds);
Cache("MyCache") = source;

MyCache这个变量其实就是一个XML文件。

四.SQL Caching
通过配置数据库连接池,只有当数据库数据被改变的时候,缓存才会改变。
开个DOS窗口:
C:\>dir aspnet_regsql.exe/s ——这个文件是专门注册SQL连接池的,它对SQLSever 7.0以上都有专门的支持,我们通过写一些专门的语句来配置这个注册连接池,可以把连接池和本地的应用程序(Asp.net服务器,即IIS)做一个连接。连接池只能监视有限的几个库,不然连接池的负载太大。使用SQL Caching:
先注册,如: aspnet_regsql.exe-S".\SQLExpress"-E-d"pubs"-ed
aspnet_regsql.exe-S".\SQLExpress"-E-d"pubs"-et-t"authors"
其中:- S".\SQLExpress" 表示要使用的SQL Server实例为".\SQLExpress"。-E 表示使用当前windows凭证进行身份验证。-d"pubs"表示用于应用程序服务的数据库名称叫"pubs"。-ed表示为SQL 缓存依赖项启用数据库。-et 表示为SQL 缓存依赖项启用表。-t"authors"表的名称为"authors"。
然后页面上:
<%@ OutputCacheDuration="99999999" VaryByParam="none"SqlDependency="Pubs.Authors" %>
就OK了。

‘肆’ 交换机的三种数据传输方式之间的区别

首先交换机有Cut through、Store and forward和fragment free三种传输方式。

(以下为三种数据传输方式对比)

1、Cut through传输方式接收到目的地址后即转发出去。这种方式延时小,但损坏的数据一样转发。

2、Store-and-forward传输方式接收到完整的数据包后,校验好坏,好的转发,坏的丢弃重发。这种方式传输可靠,但其延时较长。

3、Fragment free传输方式接收到数据包后,大于64bytes的转发,小于64bytes的丢弃。这种方式好坏介于上述两种方式之间。

(4)fragment缓存扩展阅读:

三种传输方式优缺点:

一、直通式(Cut Through):

1、当输入端口检测到一个数据包时,就检查该包的包头,根据包内的目的地址把数据包直通到相应端口。

2、优点:这种方式不需要等数据包接收完就开始转发,交换速度快,延迟非常小。

3、缺点:不提供错误检测服务,有可能将出错的数据包转发出去。也不提供缓存,不能将速率不同的端口直接接通,而且容易丢包。

二、存储转发式(Store and Forward):

1、这种方式先将数据包完整的接收下来,经过CRC检查,如果数据包没有错误,再根据地址进行转发。

2、优点:提供错误检测服务,改善了网络性能。支持速度不同的端口的转发服务,可以保证高速端口与低速端口间协同工作。

3、缺点:传输延时较大,而且需要较大的缓存容量。

三、无碎片转发(Fragment Free):

1、它检查数据包的长度是否够64个字节,若小于64字节,说明是废包,进行丢弃,若大于64字节,则发送该包。

2、这种方式可保证碰撞碎片不在网络中传播,提高了网络效率,它的数据处理速度介于直通式和存储转发式之间。多用于低端交换机产品。

3、低端交换机产品一般只具有一种交换方式,有些高端交换机产品具有两种交换方式,并且可以根据网络环境自动选择交换方式。

四、按方式分类

1、在串行传输时,接收端如何从串行数据流中正确地划分出发送的一个个字符所采取的措施称为字符同步。根据实现字符同步方式不同,数据传输有异步传输和同步传输两种方式。

2、异步传输每次传送一个字符代码(5~8bit),在发送每一个字符代码的前面均加上一个“起”信号,其长度规定为1个码元,极性为“0”,后面均加一个止信号,在采用国际电报二号码时,止信号长度为1.5个码元,在采用国际五号码(见数据通信代码)或其它代码时,止信号长度为1或2个码元,极性为“1”。

3、字符可以连续发送,也可以单独发送;不发送字符时,连续发送止信号。每一字符的起始时刻可以是任意的(这也是异步传输的含意所在),但在同一个字符内各码元长度相等。接收端则根据字符之间的止信号到起信号的跳变(“1”→“0”)来检测识别一个新字符的“起”信号,从而正确地区分出一个个字符。

4、因此,这样的字符同步方法又称起止式同步。该方法的优点是:实现同步比较简单,收发双方的时钟信号不需要精确的同步。缺点是每个字符增加了2~3bit,降低了传输效率。它常用于1200bit/s及其以下的低速数据传输。

5、同步传输是以固定时钟节拍来发送数据信号的。在串行数据流中,各信号码元之间的相对位置都是固定的,接收端要从收到的数据流中正确区分发送的字符,必须建立位定时同步和帧同步。位定时同步又叫比特同步,其作用是使数据电路终接设备(DCE)接收端的位定时时钟信号和DCE收到的输入信号同步,以便DCE从接收的信息流中正确判决出一个个信号码元,产生接收数据序列。

6、DCE发送端产生定时的方法有两种:一种是在数据终端设备(DTE)内产生位定时,并以此定时的节拍将DTE的数据送给DCE,这种方法叫外同步。另一种是利用DCE内部的位定时来提取DTE端数据,这种方法叫内同步。

7、对于DCE的接收端,均是以DCE内的位定时节拍将接收数据送给DTE。帧同步就是从接收数据序列中正确地进行分组或分帧,以便正确地区分出一个个字符或其他信息。

8、同步传输方式的优点是不需要对每一个字符单独加起、止码元,因此传输效率较高。缺点是实现技术较复杂。通常用于速率为2400bit/s及其以上的数据传输。

热点内容
101脚本 发布:2024-10-24 10:09:39 浏览:744
监控器密码忘了怎么办 发布:2024-10-24 10:07:47 浏览:423
亚马逊上传同样产品 发布:2024-10-24 10:06:24 浏览:979
多功能服务器有什么用 发布:2024-10-24 09:58:54 浏览:232
远程脚本使用文件 发布:2024-10-24 09:52:08 浏览:382
休息模式的密码是什么 发布:2024-10-24 09:47:43 浏览:920
linux给文件设置权限 发布:2024-10-24 09:46:56 浏览:339
骑砍2和吃鸡哪个需要的配置高 发布:2024-10-24 09:37:35 浏览:297
python机器学习实践指南 发布:2024-10-24 09:30:38 浏览:216
kindle电子书怎么存储文件夹 发布:2024-10-24 09:30:36 浏览:294