1. View 主线程刷新 UI : View 的更新是在 UI 主线程中进行更新 , 如果更新中执行耗时操作 , 会阻塞主线程 , 甚至出现 ANR 异常 ;
播放视频或者渲染其他的动画的时候,有两个View组件可供选择,SurfaceView和TextureView,GLSurfaceView是SurfaceView是子类,这儿还是归类到SurfaceView中吧。
Android 提供了view进行视图的绘制,可以满足大部分的会图需求,但在有些时候却是心有余而力不足。我们知道,view通过刷新来绘制视图。android系统通过vsync信号来进行屏幕的绘制。刷新的时间间隔为16毫秒。如果在16毫秒内完成了索要刷新的绘制操作,那么在视觉效果上就不会产生卡顿的感觉。如果逻辑操作过多,频繁刷新就会造成界面的卡顿。
SurfaceView就是在Window上挖一个洞,它就是显示在这个洞里,其他的View是显示在Window上,所以View可以显式在 SurfaceView之上,你也可以添加一些层在SurfaceView之上。
最近在写视频播放器的时候用到了SurfaceView和MediaPlayer,在各个功能完成后,竟得意忘形,感觉自己又get到新技能,可以嘚瑟几天了,直到前两天被人问到:
Surface 就是“表面”的意思,可以简单理解为内存中的一段绘图缓冲区。在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器(screen compositor)所管理的原生缓冲器的句柄”, 这句话包括下面两个意思:
1)Activity:用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。一个Activity通常是一个单独的屏幕,Activity通过Intent来进行通信。Android中会维持一个Activity Stack,当一个新Activity创建时,它就会放到栈顶,这个Activity就处于运行状态。 2)Service:服务,运行在手机后台,适合执行不需和用户交互且还需长期运行的任务。 3)ContentProvider:内容提供者,使一个应用程序的指定数据集提供给其他应用程序,其他应用可通过ContentResolver类从该内容提供者中获取或存入数据。它提供了一种跨进程数据共享的方式,当数据被修改后,ContentResolver接口的notifyChange函数通知那些注册监控特定URI的ContentObserver对象。 如果ContentProvider和调用者在同一进程中,ContentProvider的方法(query/insert/update/delete等)和调用者在同一线程中;如果ContentProvider和调用者不在同一进程,ContentProvider方法会运行在它自身进程的一个Binder线程中。 4)Broadcast Receiver: 广播接收者,运用在应用程序间传输信息,可以使用广播接收器来让应用对一个外部事件做出响应。
本文首发于微信公众号——世界上有意思的事,搬运转载请注明出处,否则将追究版权责任。交流qq群:859640274
Android系统中提供了View进行绘图处理,View可以满足大部分的绘图需求,但是在某些时候却力不从心,特别是进行一些开发的时候。
大家好,本文是 iOS/Android 音视频专题 的第六篇,该专题中 AVPlayer 项目代码将在 Github 进行托管,你可在微信公众号(GeekDev)后台回复 资料 获取项目地址。
asset与res.png ** 注意: ** 1 assets目录下的资源文件不会在R.java自动生成ID,所以读取assets目录下的文件必须指定文件的路径。可以通过AssetManager类来访问这些文件。比如要读取assets目录下的background.png:
在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面。由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行绘制。又由于不会占用主线程资源,SurfaceView一方面可以实现复杂而高效的UI,另一方面又不会导致用户输入得不到及时响应。在本文中,我们就详细分析SurfaceView的实现原理。 在前面Android控件TextView的实现原理分析一文中提到,普通的Android控件
SurfaceView和TextureView均继承于android.view.View
TextureView在4.0(API level 14)中引入的,它可以将内容流直接投影到View中,可以用于实现Live preview等功能。和SurfaceView不同,它不会在WMS中单独创建窗口,而是作为View hierachy中的一个普通View,因此可以和其它普通View一样进行移动,旋转,缩放,动画等变化。例如,将TextureView设置成半透明。值得注意的是TextureView必须在硬件加速的窗口中。
背景 近期,微信小游戏支持了视频号一键开播,将微信升级到最新版本,打开腾讯系小游戏(如跳一跳、欢乐斗地主等),在右上角菜单就可以看到发起直播的按钮一键成为游戏主播了: 微信小游戏出于性能和安全等一系列考虑,运行在一个独立的进程中,在该环境中不会初始化视频号直播相关的模块,这就意味着小游戏的音视频数据必须跨进程传输到主进程进行推流,给我们实现小游戏直播带来了一系列挑战。 视频采集推流 录屏采集? 小游戏直播本质上就是把主播手机屏幕上的内容展示给观众,自然而然地我们可以想到采用系统的录屏接口Media
下面就贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置
如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的SurfaceView或者TextureView做到。
近期,微信小游戏支持了视频号一键开播,将微信升级到最新版本,打开腾讯系小游戏(如跳一跳、欢乐斗地主等),在右上角菜单就可以看到发起直播的按钮一键成为游戏主播了(如下图所示)。
SurfaceView是View的子类,使用的方式与任何View所派生的类都是完全相同的,可以像其他View那样应用动画,并把它们放到布局中。 SurfaceView封装的Surface支持使用本章前面所描述的所有标准Canvas方法进行绘图,同时也支持完全的OpenGL ES库。 使用OpenGL,你可以再Surface上绘制任何支持的2D或者3D对象,与在2D画布上模拟相同的效果相比,这种方法可以依靠硬件加速(可用的时候)来极大地提高性能。 对于显示动态的3D图像来说,例如,那些使用Google Earth功能的应用程序,或者那些提供沉浸体验的交互式游戏,SurfaceView特别有用。它还是实时显示摄像头预览的最佳选择。
a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如Camera开发过程中,可能需要设置一个初始化的相机配置,设置摄像头方向,闪光灯开闭,成像质量等等,这种场景下就可以使用建造者模式
《Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧
各行各业都有鄙视链。娱乐圈的,拍电影的看不上拍电视的。IT圈的,C/C++工程师看不上Java、python、php这些搞高级API的小伙子。程序员之间,“文人相轻”的事情常有,但是平心而论,技术圈的事情确实有难易之分,工作有等级,那么技能就当然有高低。技术分高低,本地就是给我们一把尺,丈量一下自己水平,掂掂自己在领域中所处的位置。
SDL系列讲解(一) 简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL是什么,能干什么,为什么我们要学习它? SDL系列讲解(四) demo讲解 SDL系列讲解(五) 调试c代码 前言 总是会出其不意,讲解随性一些不好吗? 只讲如何使用,明显不是我的风格,于是乎,近期会开展SDL的框架原理的系列分析。当分析做完,给了整体的概念掌握,那么细节就只是时间问题了。 于是,这节开始展开,SDL的java端的代码剖析。 SDLActivity时序图 一张时序图,展开此系列。 首
首先对于《赛贝尔曲线》不是很了解的童鞋,请自觉白度百科、google等等... 为了方便偷懒的童鞋,这里给个《贝赛尔曲线》百科地址,以及一段话简述《贝赛尔曲线》: 《贝赛尔曲线》白度百科快速地址:http://baike.baidu.com/view/4019466.htm 贝塞尔曲线又称贝兹曲线或贝济埃曲线,一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋; 上面这一段话其实就“线段像可伸缩的皮筋”这一句比较重要,也很容易理解; 至
我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的源码 百度搜就知道很多下载的地方 网上源码的名字叫:Android 仿真翻页效果.zip我的博客写的比较乱,如果本篇文章没有看懂,
本文提出了一种通过辅助功能自动开启App相关权限的方法,该方法通过解析库文件实现权限的自动开启。主要步骤包括:1、解析库文件,获取权限开启列表;2、根据用户输入的参数和已开启的权限,生成待开启权限列表;3、根据待开启权限列表,开启相应的权限。该方法能够减少用户开启权限的等待时间,提升用户的体验。同时,该方法还具有很好的拓展性和可维护性。
本人普通本科毕业,计算机专业,从事Android开发也有3年了。 2020年因为疫情的原因,整个互联网行业都进入了低谷期,许多公司都进行了裁员,而我所在的公司也不例外。就这样,我离开了工作了3年多的公司。开启了2020年的面试旅程。
本文对小窗视频播放进行了详细的研究,针对几种实现方案进行了深入的对比分析,进而给出实现小窗视频播放的最优解。
Surface、SurfaceView和SurfaceHolder的关系类似MVC。Model为Surface;View为SurfaceView, Control为SurfaceHolder。
众所周知,Android平台不仅系统碎片化严重,而且不同手机的硬件配置差异导致开发某些模块的时候坑比较多,相机模块就是其中之一。为什么呢?首先,Android系统目前已经提供了两套Camera API,其中Camera 2 API是从Android 5.0(API Level 21)开始提供的。你可能会想了,那岂不是现在市面上很多机型都可以使用Camera 2 API啦?然而并不是,原因就是下面要说的第二点,很多Android手机对Camera 2 API的支持都不到位,即使是很多现在刚发的新机,它们有些依然只支持老的Camera API!这就导致做相机开发的时候不得不根据手机的实际情况切换不同的Camera API。
最近刚换了三星的Note9,深度体验了一下Bixby的语音功能,觉得挺不错的,而且上周的人工智能大会上,分布屏幕两边的分别是科大讯飞和腾讯提供的服务:讯飞听见和腾讯同传。两者的表现也都是让人眼前一亮。
需求:视频通话界面,两个surfaceView一个显示本端的视图,另一个显示对端的视图,由于显示比例的问题总会存在一个覆盖另一个的问题,为保证用户体验,规定小的覆盖大的视图上面,且点击小的视图可切花为大图视图居中,达到两个视图切花的功能。简单写一个demo完成功能的测试需求,为了较少文章的篇幅,视图的内容用回执矩形代替(实际开发中显示的是本地照相采集的数据和对端经过opgl处理的数据)
Surface的官方介绍:Handle onto a raw buffer that is being managed by the screen compositor,Surface是一个raw buffer的句柄,通过它在raw buffer上进行绘制,可以通过Surface获得一个Canvas。
本文实例为大家分享了SurfaceView播放视频发送弹幕,并实现滚动歌词,供大家参考,具体内容如下
当我们需要开发一个复杂游戏的时候,而且对程序的执行效率要求很高时,View类就不能满足需求了,这时必须用SurfaceView类进行开发。
这个问题应该是 你给listView加了风格,或者给当前的Window加了风格,因为surfaceView,如果你不设置,应该也有一个默认的颜色值
在写手电筒APP之前,当然已经参考market上的很多手电筒APP,还有网上如何实现手电筒功能的各种源码。不管是源码还是market上的APP,总结了几点的问题。
零、前言 今天主要有两点 1).界面布局,视图仿一下我手机自带的相机 2).Camera的简单使用,虽然Camera已经过时了,但还是来看一下,由简入深 下一篇会介绍替代者:Camera2 温馨提示:本文多图预警,请Wifi观看~ 权限申请自行解决 <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERN
Android提供了常见的视频的编码、解码机制。使用Android自带的MediaPlayer、MediaController等类可以很方便的实现视频播放的功能。支持的视频格式有MP4和3GP等。这些多媒体数据可以来自于Android应用的资源文件,也可以来自于外部存储器上的文件,甚至可以是来自于网络上的文件流。
大家好,今天我为大家介绍一下如何在Android系统下实现实时直播互动中的多视频展示功能。 我们现在都清楚实时直播互动中多路视频的展示是目前比较流行的趋势,因为大家都想看到更多视频画面的需求,是非常符合人类的习惯的。
Android使用MediaRecorder类进行视频的录制。 需要注意,使用MediaRecorder 录音录像 的设置代码步骤一定要按照API指定的顺序来设置,否则报错 步骤为: 1、设置视频源,音频源,即输入源 2、设置输出格式 3、设置音视频的编码格式 一、首先看布局文件,这里有一个SurfaceView,这是一个绘制容器,可以直接从内存或者DMA等硬件接口取得图像数据, <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
在这里由于文章篇幅较长,所以小编这里只放了一部分面试题的答案,关于这些面试题及答案小编整理了一个面试文档,需要更多面试题和完整面试答案的,文末有领取方式
这是游戏的主界面的编写部分 首先,由于是游戏,所以必须提到一个组件SurfaceView。在这里我们自定义一个GameView继承自SurfaceView
所有的系统必然会从内部滋生腐朽,尤其是巨大的单体系统。最具腐朽必然特性的大系统,是社会系统。
今天给大家介绍一下在Android系统下视频如何渲染与展示。 我们都知道一个直播客户端对音视频的处理主要由以下几大部分组成:1. 数据采集; 2. 编码; 3. 传输; 4. 解码;5.渲染与展示。 今天讲的就是渲染与展示。
对数据进行标准化后可以加快模型的收敛。通过比较不同的实验结果可知,一个好的数据分布更加利于模型的整体收敛。
1.黑屏原因:可能是由于surfaceView还没有创建完成就播放,肯定不行,所以必须在surfaceViewCreated里面才能播放
领取专属 10元无门槛券
手把手带您无忧上云