Android工作学习收集整理(九月)

视频解码硬解和软解的区别

硬解
  • 字面上理解就是用硬件解码。通过显卡的视频加速功能对高清视频进行解码。可以理解为有一个专门的电路板来进行视频的解码工作,是依靠GPU。
  • 调用GPU的专门模块编码来解码,减少CPU运算。显卡核心GPU拥有独特的计算方法,解码效率非常高,这样不但能够减轻CPU的负担,还有着低功耗,发热少等特点。
  • 但是,由于硬解码起步比较晚,软件和驱动对他的支持度很低,基本上硬解码内置什么样的模块,就解码什么样的视频,面对网上各色各样的视频编码样式,兼容性不好。此外,硬解码的滤镜、字幕、画质方面都做的不够理想。
  • 对于android设备,目前用得比较多的芯片就是高通、海思和联发科,这些芯片大都集成了很多的功能,CPU、GPU、DSP、ISP包括视频解码、音频解码等等
  • 在Android中使用硬件解码直接使用MediaCodec就可以了,虽然MediaPlayer也是硬件解码,但是被封装得太死了,支持的协议很少。而MediaCodec就很好拓展,我们可以根据流媒体的协议和设备硬件本身来自定义硬件解码,代表播放器就是Google的ExoPlayer。
软解
  • 字面上理解就是用软件解码。但是实际上还是要硬件支撑。这个硬件就是CPU。
  • 在软解码过程中,需要对大量的视频信息进行运算,所以对CPU性能的要求非常高。尤其是对高清大码率的视频来说,巨大的运算量就会造成转换效率低,发热量高等问题。
  • 我们最最常见的视频软解码开源库就是FFmpeg。目前基于FFmpeg的开源播放器有B站的ijkplayer
  • 不过,软解码不需要过多的硬件支持,兼容性非常高,即使出现新的视频编码格式,只要安装好相应的解码器文件,就可以顺利播放。而且软解码拥有丰富的滤镜,字幕,画面处理优化等效果,只有你CPU够强悍,就能够实现更加出色的画面效果。
总结
  • 在Android设备硬件支持的情况下优先使用Android设备的硬件解码,减少CPU的占用,更加省电。
  • 在Android设备硬解不支持的情况下选择使用软解码,不管怎么样,视频至少能够播放,具有更好的适应性,但是增加了CPU的占用,更加费电。
    软硬结合才是王道,根据实际情况合理选择

shape 可以动态设置

TextView textView = new TextView(this);
GradientDrawable drawable = new GradientDrawable();
drawable.setCornerRadius(5);
drawable.setStroke(1, Color.parseColor("#cccccc"));
drawable.setColor(Color.parseColor("#eeeeee"));
textView.setBackgroundDrawable(drawable);

xfermode

设置画笔在图片堆叠时候的显示模式,共有16种:

具体的PorterDuff.Mode请看:

Mode值说明
PorterDuff.Mode.CLEAR所绘制不会提交到画布上
PorterDuff.Mode.SRC显示上层绘制图片
PorterDuff.Mode.DST显示下层绘制图片
PorterDuff.Mode.SRC_OVE正常绘制显示,上下层绘制叠盖
PorterDuff.Mode.DST_OVER上下层都显示。下层居上显示
PorterDuff.Mode.SRC_IN取两层绘制交集。显示上层
PorterDuff.Mode.DST_IN取两层绘制交集。显示下层
PorterDuff.Mode.SRC_OUT取上层绘制非交集部分
PorterDuff.Mode.DST_OUT取下层绘制非交集部分
PorterDuff.Mode.SRC_ATOP取下层非交集部分与上层交集部分
PorterDuff.Mode.DST_ATOP取上层非交集部分与下层交集部分
PorterDuff.Mode.XOR现实非交集部分
PorterDuff.Mode.DARKEN交集部分颜色加深
PorterDuff.Mode.LIGHTEN交集部分颜色变亮
PorterDuff.Mode.MULTIPLY显示交集部分,颜色混合叠加
PorterDuff.Mode.SCREEN取两图层全部区域,交集部分变为透明色

TextView 分散对齐字体

  • 自定义TextView的时候,可以用getTextSize(),getTypeface()等,获得在xml中设置的android:textStyle=“bold”,android:textSize="15sp"等属性

其他

  • RecyclerView 子项item中含有EdiTtext复用问题
  • setInputType(EditorInfo.TYPE_NUMBER_FLAG_DECIMAL)不生效的问题解决方法
  • 富文本设置范围的时候,如果从头到尾的范围,需要在最后加一个字符,正常选空格
  • RecyclerView在不需要动画的时候,可以通过下面的方法关掉动画
((SimpleItemAnimator) rv_content.getItemAnimator()).setSupportsChangeAnimations(false);

将DatePicker和TimerPicker显示在同一个布局中的问题

  • 单个组件太大,属性里大小不可调整设置,如果垂直排列到AlertDialog弹窗里,则单页无法显示全部内容
  • 解决办法:
  • 在DatePicker属性中增加android:datePickerMode=”spinner”和android:calendarViewShown=“false”(不显示日历)即可
  • 在TimePicker属性中增加android:timePickerMode=”spinner”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ltym2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值