Android 播放视频UI的功耗优化 && 动态增加view小结

第 23 章:窗口系统 Insets 代表屏幕被系统 UI(状态栏、导航栏、IME)或硬件特性(挖孔、圆角)占用的区域。窗口布局时需要避开这些区域。Insets 系统从旧演进到现代与。 阅读详情

背景:优化前播放视频的UI是直接用XML文件描述,这样确实方便调试和绘图。

但是如果不是动态添加surafaceview到activity的话,dumpsys sufaceFlinger会发现有一层activity的view一直存在。

但是如果我们是动态增加view到activity的话,播放视频的时候只会显示surfaceview,从而达到功耗优化的目的。


动态增加view的话,主要使用了以下重要的接口:

(1)LayoutInflater类,用起来其实和findVIewById配合很多。

主要有两个view的初始化

前者,LayoutInflater + findViewById

后者,setContentView + findViewById

最明显的区别是,前者是直接使用R.layout.XXX来找到实例目标所在的XML文件,而后者则是通过setContentView(R.layout.XXX);

所以前者比较灵活,在程序中想到就用;但是后者一般只能初始化一次。


初始化LayoutInflater的方法有三种,直接拿来主义:

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或

LayoutInflater inflater = LayoutInflater.from(Activity.this);或

LayoutInflater inflater = getLayoutInflater();


使用则是inflater.inflate(R.layout.XXX,null).findViewById(R.id.XXX);


(2)addView的两个方法

addView
public void addView(View child,
                    int width,
                    int height)Adds a child view with this ViewGroup's default layout parameters and the specified width and height. 

参数:
child - the child view to add

addView
public void addView(View child,
                    ViewGroup.LayoutParams params)Adds a child view with the specified layout parameters. 

指定者:
接口 ViewManager 中的 addView
参数:
child - the child view to add
params - the layout parameters to set on the child

我用的比较多的是后者。其实就是在某个view或者viewGroup下面增加一个子view,这个子view的布局就是params.

这里所说的布局就是XML文件里面,该view或者该viewGroup的排版属性而不是父布局的排版属性。


(3)setLayoutParams

setLayoutParams
public void setLayoutParams(ViewGroup.LayoutParams params)

Set the layout parameters associated with this view. These supply
 parameters to the parent of this view specifying how it should be
 arranged. There are many subclasses of ViewGroup.LayoutParams, and these
 correspond to the different subclasses of ViewGroup that are responsible
 for arranging their children.


参数:params - the layout parameters for this view


多用来重新设置该view或者viewGroup的布局。


(4)bringToFront

bringToFront
public void bringToFront()

Change the view's z order in the tree, so it's on top of other sibling
 views


字面理解就是把这个view放在其他兄弟姐妹view的最上面.

注意的是要在addView(A),然后再使用A.bringToFront();

这是由其源码决定

public void bringChildToFront(View child) {
        int index = indexOfChild(child);
        if (index >= 0) {
            removeFromArray(index);
            addInArray(child, mChildrenCount);
            child.mParent = this;
        }
    }


因为要先把这个A 从队列里面remove掉再从新add到队尾。

(5)setZOrderMediaOverlay

public void setZOrderMediaOverlay
(boolean isMediaOverlay)
Control whether the surface view's surface is placed on top of another regular surface view in the window (but still behind the window itself). This is typically used to place overlays on top of an underlying media surface view.

Note that this must be set before the surface view's containing window is attached to the window manager.


Android.Views.SurfaceView.SetZOrderMediaOverlay Method
Control whether the surface view's surface is placed on top of another regular surface view in the window (but still behind the window itself).
Syntax
[Android.Runtime.Register("setZOrderMediaOverlay", "(Z)V", "GetSetZOrderMediaOverlay_ZHandler")]
public virtual void SetZOrderMediaOverlay (bool isMediaOverlay)
Parameters
isMediaOverlay
Documentation for this section has not yet been entered.
Remarks
Control whether the surface view's surface is placed on top of another regular surface view in the window (but still behind the window itself). This is typically used to place overlays on top of an underlying media surface view.
Note that this must be set before the surface view's containing window is attached to the window manager.
Calling this overrides any previous call to SurfaceView.SetZOrderOnTop(bool).



使用于surfaceview的Z order排序,要在addView之前使用

(6)setZOrderOnTop

Android.Views.SurfaceView.SetZOrderOnTop Method
Control whether the surface view's surface is placed on top of its window.
Syntax
[Android.Runtime.Register("setZOrderOnTop", "(Z)V", "GetSetZOrderOnTop_ZHandler")]
public virtual void SetZOrderOnTop (bool onTop)
Parameters
onTop
Documentation for this section has not yet been entered.
Remarks
Control whether the surface view's surface is placed on top of its window. Normally it is placed behind the window, to allow it to (for the most part) appear to composite with the views in the hierarchy. By setting this, you cause it to be placed above the window. This means that none of the contents of the window this SurfaceView is in will be visible on top of its surface.
Note that this must be set before the surface view's containing window is attached to the window manager.
Calling this overrides any previous call to SurfaceView.SetZOrderMediaOverlay(bool).

(7)增加一个常识

android:layout_gravity 只在 LinearLayout 和 FrameLayout 中有效: 
①对于 LinearLayout :
当 android:orientation="vertical"  时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal 是生效的。
当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical 是生效的。
②对于 FrameLayout :
任意android:layout_gravity属性都有效,可以非常方便实现对组件的布局。
 

有了这些接口,动态增加View就是一个一个addview进去。该隐藏的隐藏的,该removeView的remove。


最后说下今天debug的一个怪异的问题:一个LinearLayout 的子view: imageview 被其兄弟一个LinearLayout的子view : textview给盖住了,但怪异的是

这个imageview不可见确能够点击。


因为是动态增加的view,一开始找不到有效地debug方法,只能想到dumpsys surfaceFlinger或者dumpsys window来看,但是看了感觉没有一一对应我的view,QAQ。

没办法,我只好一个一个把可能对盖住的imageview的嫌疑犯 一一排除。

首先我检测的是sufaceview,surfaceview调整了确实没盖住。

所以嫌疑犯在surfaceview和焦点框videoFocusLayout,后来确实是videoFocusLayout出了问题,但是没找到原因。。

解决的办法是隔离这个videoFocusLayout.

就是给他一个爹(父布局),让他和我们的imageview的老爸(LinearLayout)做不成兄弟。这样应该降低其影响面积...

最后真的ok了。。

感觉这个solution有点懵对的感觉,明天找下sufaceFlinger的大神请教下吧。。



第 45 章 WebView WebView 是 Android 可嵌入的浏览器组件,允许应用直接在自身 UI 内展示网页内容。在底层,它是一套极其复杂的子系统:Android 框架仅提供一层薄薄的外观封装,将全部操作委托给可更新的、基于 Chromium 的提供方安装包,该安装包运行在独立的一组进程中。本章梳理完整调用栈:从应用开发者编写的 XML<WebView>标签,经过工厂与提供方抽象层,深入多进程 Chromium 引擎、安全沙箱,以及无需完整系统升级即可完成更新的更新机制。 阅读详情

相关推荐

第 24 章:显示系统

是代表一整个逻辑显示器的;在它之下,Android 把窗口组织为容器树。每一个把具备相同特性、处于同一 Z 轴区间的窗口归为一组。文档说明三种类型,保障 Z 轴顺序正确性:BELOW_TASKS:仅可存放 BELOW_TASKS 类型 DisplayArea 以及位于任务下层的 WindowTokenABOVE_TASKS:仅可存放 ABOVE_TASKS 类型 DisplayArea 以及位于任务上层的 WindowToken。

dengfuma的专栏 350

Android Camera预览/录像功耗偏高优化方法

1. 降低CPUloading 2. 在不造成卡顿的情况下降低CPU的频率 另外,请确认测试使用的是user版本,userdebug版本的camera默认全程高频

美丽心情 2562

Android视频预览功能的实现与优化

简介:在Android平台上,视频预览是一个关键功能,它使得用户能够迅速获取视频内容的概览,而不必等待整个视频播放完成。实现视频预览需要掌握多个技术方面,包括但不限于多媒体框架的使用、Surface对象的操作、不同View组件的特性、Camera API的应用、硬件加速解码、权限管理、异步处理、以及考虑帧率和分辨率等因素来优化性能和用户体验。掌握这些知识点将帮助开发者创建高效且用户友好的视频预览功能,并确保视频资源的正确加载和播放。

weixin_32925455的博客 1276

【Android -- 性能优化】耗电优化

在移动设备开发中耗电量是一个非常重要的指标,如果用户一旦发现我们的应用非常耗电,不好意思,他们大多会选择卸载来解决此类问题,所以耗电量是一个十分重要的问题。

Kevin Learn Android 6502

android 漂亮的UI界面 完整的界面设计

声明:这也是我学习时在网上下载的,鉴于分享精神,并且觉得很不错才上传上来的。。。。。 android 漂亮的UI界面 完整的界面设计 这是一个完整的UI设计,但是没写动作,这是一个公司程序员的公司任务设计,请别商用,要用请修改。。。

Android应用源码奇艺高清UI界面源 代 码.zip

Android 应用开发源码 参考与学习使用

FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器

FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器教程,该课程基于C++语言,用FFmpeg、OpenGL ES、OpenSL ES和MediaCodec打造Android视频播放器。以录播课形式讲解课程所涉及的知识点和整体流程,每节课都有相关的PPT和源码资料,并用通俗易懂的方式讲解课程。适合人群 有一定的C++基础和Android开发经验。

Android 奇艺高清UI界面

主要是奇艺高清UI界面的源代码,界面很美,功能很全有兴趣的可以下载看看学习下。希望对大家有所帮助。  

安卓应用播放视频卡顿的原因解析及解决办法

最近做一个播放视频的小应用,安装到安卓一体机触摸屏上(安卓版本4.4.4),但是视频很卡,效果很不好,视频源也不大,但就是卡。通过一天的搜索与打包实践,整理以下内容供参考 1.老版本的做视频播放用movieTexture,可以下载EasyMovieTexture插件试用一下,据说支持安卓视频播放,但试用打包到机器上播放不出来,另外使用过程中需要将视频源转换成ogg或ogv格式,将生成的图片赋给Ra...

qq_42079896的博客 1万+

微信小游戏CE修改实战:从入门到精通(附防作弊思路)

本文深入探讨微信小游戏的安全攻防实战,重点分析CE修改、反编译和重打包等安全风险。通过详细的内存修改案例和代码保护方案对比,提供从客户端到服务端的全方位防护策略,帮助开发者构建有效的防作弊体系。

m2n3b4v5c6的博客 1145

基于Unity引擎利用OpenCV和MediaPipe的面部表情和人体运动捕捉系统

增加了模型的绑定,利用Mediapipe这个强大的库可以实现识别面部表情的捕捉和人体结构运动的捕捉,基于以上的特性加入到Unity的人物模型中,实现实时的面部表情和人体运行的捕捉

BIgbossyii的博客 1万+

拒绝卡顿,揭秘盒马鲜生 APP Android 短视频秒播优化方案

短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留。因此,体验的优化就显得尤为重要。上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 ...

音视频开发进阶 597

Vmware安装windowsServer2022版本

全网最详细的Vmware安装windowsServer2022版本

A乐神的博客 7013

玩转 Android MediaPlayer之视频预加载(优化)

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!       本文是在《玩转 Android MediaPlayer之视频预加载》基础上做更进一步的优化,适应更多终端的MediaPlayer,不再唠叨预加载的作用和基础,有兴趣的读者请看上回。       MediaPlayer由厂家定制,不同终端的MediaPlayer略有差异,例如:有些MediaPlay

hellogv的专栏 9万+

A Side Scan Sonar Image Denoising Algorithm Based on Compound of Fuzzy Weighted Average and Kalman F

Abstract 水下侧扫声纳图像的噪声来源:高斯噪声、脉冲、斑点噪声。 传统方法只能移除部分噪声,并且去噪后容易造成细节模糊。 本文在考虑到噪声的随机性以后,提出一种融合了模糊加权平均和卡尔曼滤波的去噪方法。 在最大化保留图像细节的基础上,同时去除高斯噪声和脉冲噪声 一.Introduction 由于海底环境和声波自身干涉的影响,声纳图像生成的图像难免会有噪点。声纳采集的图像通常会有高斯噪声、脉...

qq_44516871的博客 927

从踩坑到填平:我在RHEL7上给Tesla A100装驱动的完整记录(含Fabric Manager配置)

本文详细记录了在RHEL7系统上为Tesla A100安装Nvidia驱动的完整过程,包括Fabric Manager配置的关键步骤。通过分析A100架构的特殊性,提供了从驱动安装到服务配置的详细指南,并分享了常见问题的排查方法和性能调优技巧,帮助用户高效部署高性能GPU计算环境。

weixin_29291863的博客 283

Android性能优化视频

1.android main Thread:System Events,Input Events,Application,Services ,Alarm,UI Drawing16 milliseconds 将重绘一次屏幕或者1s60frams将会看起来平滑dropped frame  当处理evnent时间过长将错过16ms的绘制时间,导致少绘一帧AsyncTask helps get work ...

zzf8845的专栏 2247

UG\NX二次开发 获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态

获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态。

王牌飞行员_里海的博客 1982

Android视频播放器实现小窗口和全屏状态切换

Android视频播放器实现小窗口和全屏状态切换实在是不好意思,楼下评论的兄弟久等了,这文章一直没写第一是没时间,第二是自己准备也不充足,最近才看了好几个Android视频播放器的开源项目,才对视频播放器的大小切换有点了解,就我目前的了解,视频播放器的大小屏切换基本有三个方案可选,下面我分别简单地讲一下,至于具体的实现我会给出github的链接,大家直接去看源代码。一、让播放器悬浮在Activity

Dawish的专栏 6万+

【毕设保姆级指南】基于YOLOv8的DAGM 2007工业缺陷检测系统从搭建到落地

本教程基于YOLOv8算法实现DAGM 2007工业缺陷检测系统,包含数据处理、模型训练和可视化界面开发全流程。首先对DAGM数据集进行格式转换和划分,然后通过YOLOv8训练工业缺陷检测模型,最终构建PyQt5交互界面实现缺陷可视化检测。该系统可用于智能制造中的产品质量控制,帮助快速定位工业产品缺陷,提升检测效率和准确性,为工业质检提供高效解决方案。

LXY_LOVE36的博客 182

位置点位到达判断FC(Easy+Codesys+博途平台)

IN rActPositon REAL 轴当前实际位置 1IN arAbsPosition REAL[10] 各工作点位坐标 2IN rDeadZone REAL 位置达到判断域值 范围 3OUT abInAbsPos BOOL[10] 到达各绝对定位点位标志 位置到达输出 4VAR i INT 循环计数 5VAR rErr REAL 位置偏差 6。

RXXW_Dor的博客 536

Android 性能优化系列视频(六)

极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能   本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: App Launch time App Launch time &amp; Activity creation App Launch time &amp; Bloa...

程序员Android 535

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

揭秘盒马鲜生 Android 短视频秒播优化方案

短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留。因此,体验的优化就显得尤为重要。上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 Android 端的优化。 作者|少阳 审校|泰一 优化前的盒马沉浸式短视频播放页面,体感和流畅度上与主流短视频 App 有明显差距。主要问题有播放封面闪屏、出流速度慢两个问题。所以优化的目标是解决盒马沉浸式短视频现有短板,与主流 App 的沉浸式短视频体验对齐,如抖音、手淘等。具体指标有: 满足硬性指标:播放成功率.

阿里云CloudImagine 770

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 短视漏音播放优化 漏音优化 流畅度优化

背景: 目前移动端比较火爆的项目是视频了。流量大的专业短视频平台:快手、抖音、火山、腾讯、皮皮虾(原:内涵段子),还有就是电商平台现在的直播间和短视频关联商品。这些平台都是以短视频未基础的,在短视频的基础上,衍生出直播间和购物车、商店之类的分支。这些评审的估值也非常吓人,只要上市都能轻松实现财富自由。但是财务自由的前提是平台能够有好的体验和素材。 常见的短视频APP布局:瀑布式、列表式、上下单个滑动 瀑布式:又常见的比如快手的,两列,根据当前获取到的焦点进行item的静音播放 列表式:常见的有皮皮虾

705

android播放视频过程cpu占用高,查看Android项目CPU占用的主要地方及优化方法

因为我们最近开发发现APP特别卡顿,经过同事和我一直最后发现并解决了问题,特此记录并供参考查看文章前请确保一下必须正常电脑配置好adb环境adb连接手机成功新建一个Android studio项目,包名称com.lixiang 运行到手机首先alt+r 输入才cmd进入控制台,,输入 adb shell top 查看手机cup占用情况如下:image.png图中可以查看到每个进程当前占用的cup的...

weixin_33431149的博客 1190

Android端短视频系统性能优化方法

短视频系统布局优化 布局优化的思想:尽量减少布局文件的层级。布局的层级少了,这就意味着Android的绘制工作量少了,那么程序的性能自然提高了。 如何进行布局优化呢? 首先删除短视频系统布局中无用的控件和层级 有选择地使用性能较低的ViewGroup,比如RelativeLayout。 如果有的短视频系统布局中既可以使用LinearLayout,也可以使用RelativeLayout,那么就采用L...

云豹网络科技 1104
上一篇: Android 琐碎note (always update)
下一篇: Android TV 视频surfaceview 变化导致的闪烁
muximuxi525
博客等级 码龄15年 134粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值