04 2019 档案
摘要:Handler是Android中的消息机制实现,可以实现UI线程和子线程的消息传递,这里就来深入了解Android的消息机制,来分析Handler的源代码入手实例在Android开发中,子线程与主线程通信是再寻常不过的事情了,那么为何需要子线程和主线程通信呢...
阅读全文
摘要:算法是思想的体现形式,常见的算法做一些总结算法简介算法—Algorithm解题方案的准确而完整的描述,是一系列解决问题的清晰指令特征有穷性,确切性,输入项,输出项,可行性算法运算要素算术运算:加减乘除等运算逻辑运算:或、且、非等运算关系运算:大于、小于、等于...
阅读全文
摘要:数据结构在Android中也有着大量的运用,这里采用数据结构与源代码分析相结合,来认识Android的数据结构线性表线性表可分为顺序存储结构和链式存储结构顺序存储结构-ArrayList通过对源代码的产看得知,ArrayList继承自AbstractList...
阅读全文
摘要:UI的绘制流程和事件分发,属于Android里面的重点内容,在做自定义UI的时候,更是应该了解UI的绘制流程是如何的,此篇文章就是说明UI的绘制流程,事件分发前面已经详细讲过了UI绘制流程探索这里分析Activity,而不是AppCompatActivity...
阅读全文
摘要:Path是一个工具类,用来记录线条的轨迹路径,然后通过绘制轨迹路径,可以得到各种各样的图案,而PathMeasure是用来对Path进行测量的工具,再Path的运用中,运用最多的就是贝塞尔曲线,也是本文的重点贝塞尔曲线贝塞尔曲线就是这样的一条曲线,它是依据四...
阅读全文
摘要:Canvas可以用来绘制直线、点、几何图形、曲线、Bitmap、圆弧等等,做出很多很棒的效果,例如QQ的消息气泡就是使用Canvas画的Canvas中常用的方法初始化参数Paint paint = new Paint();paint.setColor(Col...
阅读全文
摘要:滤镜在图片处理里面有很多的运用,尤其是相机使用了大量的滤镜,通过对颜色通道的调和,可以呈现出各种各样的效果对图像进行一定的过滤加工处理,使用Paint设置滤镜效果很多高级UI使用时候需要关闭硬件加速,不关闭的话,有些API无法支持Alpha滤镜处理MaskF...
阅读全文
摘要:在使用了Panit画笔之后,可以对其进行渲染,从而达到更加人性化的方式渲染分类按常用渲染方式可以分为以下几种:BimapShader位图的图像渲染器LinearGradient线性渲染RadialGradient环形渲染:水波纹效果,充电水波纹扩散效果、调色...
阅读全文
摘要:在UI这一块,谈到自定义,就离不开画笔和画布的使用话题,在自定义控件的时候,为了做出炫酷的效果,我们往往会使用画笔和画布,那么这里我们就先来看看画笔的使用吧简单使用例子自定义一个Viewpublic class PaintView extends View ...
阅读全文
摘要:自定义控件在Android开发中有着大量的运用,为了做出符合项目的效果很多时候需要自定义控件,这里就使用两个自定义控件,来说明自定义控件的使用流程仿QQ侧滑之前使用DrawerLayout和NavigationView都实现了侧滑的效果,在这里使用自定义的V...
阅读全文
摘要:事件传递在Android中有着举足轻重的作用,那么事件的传递在Android中又是怎么样实现的呢,在这里我们将进一步探讨Android的事件传递机制从一个例子入手首先是一个简单的onTouch和onClick事件的例子public class TouchAn...
阅读全文
摘要:有的时候会需要做一些自定义的动画效果,在会反复用到的动画效果可以考虑做成动画框架,方便使用,做成框架的话就需要考虑很多的问题,最典型的问题就是属性和方法必须要是可配置的,这里就来聊一聊自定义动画框架的做法重难点分析在自定义动画框架里面,最难的一个问题就是怎么...
阅读全文
摘要:栅格图可以实现图片的清晰显示,但这也意味着如果要在各种设备上使用栅格图,那么在使用的时候就会产生为了适配各种尺寸的设备而增加大量不同规格的栅格图,这也直接导致了资源文件体积的增大,矢量图就不存在这个问题,这里就介绍一种矢量图–SVGSVG的简介SVG可缩放矢...
阅读全文
摘要:MD动画是谷歌推出的一种动画效果,其实现的效果能让用户看着很是舒服,符合MD动画的动画,有很强的用户交互体验Touch Feedback(触摸反馈)在触摸反馈这一块,用的最多的就是水波纹效果,而水波纹效果是从5.0才开始出现的,从5.0开始,便已自带水波纹效...
阅读全文
摘要:在3.0以前,动画效果主要为补间动画(TweenAnimation)和帧动画(FrameAnimation),从3.0开始加入了属性动画,其本质就是不断地改变控件的属性,从而达到复杂的动画效果,其效果也优于之前的动画效果,而且真正的实现了View动画补间动画...
阅读全文
摘要:Behavior本身是一个抽象类,可以用于两个view之间的状态监听,也可用于某个view监听CoordinateLayout里面的所有控件滑动状态,实现自定义Behavior则可以实现任意两个view之间的状态变化简单使用这里我们自定义一个Behavior...
阅读全文
摘要:FloatingActionButton为悬浮按钮,就是常见的那种悬浮在控件上,可以调出其他菜单的按钮FloatingActionButton的特有属性app:backgroundTint 按钮的背景颜色app:backgroundTintMode 按钮背景...
阅读全文
摘要:CardView是在Android 5.0推出的新控件,为了兼容之前的版本,将其放在了v7包里面,在现在扁平化设计潮流的驱使下,越来越多的软件使用到了CardView这一控件,那么这篇文章就来看看CardView怎么使用吧CardView的特有属性cardB...
阅读全文
摘要:关于沉浸式设计,在国内指的是Toolbar和系统状态栏相统一,而谷歌官方给出的沉浸式则是指整个界面为UI所用,而这里所说的沉浸式则是指的前者,涉及4.4和5.0及以上,4.4以下的Android做不出沉浸式设计头部沉浸式在5.0及以上可以很简单的实现沉浸式,...
阅读全文
摘要:TableLayout选项卡,用于需要使用选项卡的场景,一般是用于切换Fragment,现在的主流做法一般是TableLayout+ViewPager+Fragment,综合实现选项卡的操作由于TableLayout位于support-design里面,故在...
阅读全文
摘要:Google推出的Palette是用来调色的,正如其汉语意思一样,可以用来显示颜色,在显示图片的时候,会配合图片的色调来显示,这样就显得很融合,其实Palette可以分析出图片中的很多特性,例如主色调、鲜艳度、柔和度等Palette获得的颜色其主要的获取颜色...
阅读全文
摘要:在Google提供的控件中,在support-design及v4,v7包中,存在着很多符合MD标准的控件,这里罗列出一些常用的控件TextInputLayout这个控件在作为输入框的时候是极其方便及好用的,结合EditText使用 ...
阅读全文
摘要:在与用户的交互中,最为常用的Toast和Dialog,但二者都存在其局限,Toast无法与用户进行交互,Dialog虽然可以与用户交互,但却会阻断用户操作的连贯性,介于二者之间的平衡,Snackbar孕育而生自定义Toast首先我们来做一个自定义的Toast...
阅读全文
摘要:NavigationView是遵循MD设计规范的侧滑模式,推荐使用要使用NavigationView,就需要引入support-design依赖implementation 'com.android.support:design:25.4.0'这里的25.4...
阅读全文
摘要:侧滑的方案有很多种,早期的开源SliddingMenu,以及后来的DrawerLayout以及NavigationView等都可实现侧滑效果,这里介绍的是DrawerLayout,下一节将介绍NavigationView原理DrawerLayout位于v4包...
阅读全文
摘要:RecyclerView强大的地方在于高度的可定制,正式由于此优点,现在的项目大多使用RecyclerView,这里我们仿照QQ的功能,实现RecyclerView的拖拽和侧滑功能功能说明上下拖拽,实现Item的交换左右侧滑,实现Item的删除在此基础上,增...
阅读全文
摘要:在ListView中,可以添加头部和尾部,其添加方法也是十分的简单,直接调用listview.addHeaderView(view);和listview.addFooterView(view);即可,但在RecyclerView中却没有这样的方法,那么要在R...
阅读全文
摘要:上文讲到了RecyclerView的简单使用,知道RecycleView是怎么使用的了,那么这一节将基于上一届的内容继续改进,在ListView中很轻松就能实现的间隔线,在RecycleView中也需要自己去实现,那么这一篇文章就来实现间隔线的添加,当然也包...
阅读全文
摘要:RecyclerView从Android 5.0开始引入,用以替代ListView、GridView控件,RecyclerView的存在,使得控件的耦合度更低,在ListView中需要使用ViewHolder做优化,而在RecyclerView里面自带了Vi...
阅读全文
摘要:MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开MVVM的优点可重用性:你可以把一些视图逻辑放在一个ViewModel里面,让很多v...
阅读全文
摘要:MVP是在开发中常用的框架,要了解其原理,先要从了解MVC开始,这里就对MVP框架做一个简单的介绍MVCMVC为Model,View与Controllor的缩写Model:业务逻辑和实体模型View:对应于布局文件,但是细细的想想这个View对应于布局文件,...
阅读全文
摘要:ButterKnife在实际开发中有着大量运用,其强大的view绑定和click事件处理,使得开发效率大大提高,同时增加了代码的阅读性又不影响其执行效率注解的分类注解主要有两种分类,一个是运行时,一个是编译时运行时注解:由于会影响性能,不是很推荐使用编译时注...
阅读全文
摘要:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Depen...
阅读全文
摘要:JSON在现在数据传输中占据着重要地位,相比于xml,其解析和构成都要简单很多,第三方的解析框架也不胜枚举,这里之所以要自定义一个json解析框架,一方面是更好的了解json解析过程,另一方面是有时候需要对解析出来的json数据做转换实现的功能json转mo...
阅读全文
摘要:图片加载核心就那些东西,这里设计一个图片加载框架,涉及到本地加载和网络加载,内存缓存和硬盘缓存,等等思路在getView的时候开始框架的调用配置一系列环境,包括加载策略,缓存策略,线程数量调用图片显示,从而添加请求到执行队列请求及转发请求,调用加载器,根据需...
阅读全文
摘要:在项目中,往往涉及到数据库的版本升级,通常会有两种升级方式,一种是纯代码实现,一种是脚本实现,这里使用脚本升级,这样的升级方式更便于维护思路全版本升级,重点在于数据的迁移,这里使用备份原数据库,新建数据库,增删字段,复制数据库的升级思路,其版本控制在脚本中声...
阅读全文
摘要:这里通过设计并实现一个网络框架的搭建,下载设计思路支持请求JSON文本类型,这样的话需要一个处理JSON的类,这里使用fastjson依赖发出请求时,调用层不用关心上传参数,这里就需要对请求进行封装,并且将其封装的参数传递给框架,由框架去处理获取数据后在框架...
阅读全文
摘要:在以前,操作数据库的时候,往往是通过DBHelper类去操作数据库,然而这种操作方式存在其固有缺陷,因为其是创建在DB目录下,会随着软件的卸载而卸载,那么有时有需要在本次卸载并不删除数据库,又或者是通过面向对象的思想去操作数据库,主要是对比ormlite框架...
阅读全文
摘要:设计原则是架构的灵魂,设计模式是具体的实现单一职责原则定义单一职责原则(SRP:Single responsibility principle)又称单一功能原则。它规定一个类应该只有一个发生变化的原因特点降低类的复杂性,对类或接口的职责有清晰明确定义提高可读...
阅读全文
摘要:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介优缺点优点职责清晰高扩展性智能化缺点由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢实现代理模式需要额...
阅读全文
摘要:提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示优缺点优点简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来...
阅读全文
摘要:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式让算法独立于使它的客户独立而变化角色环境(Context)角色:持有一个Strategy的引用抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实...
阅读全文
摘要:当一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。又称状态对象模式,状态模式是对象的行为模式角色环境(Context)角色:上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个定义了对象的当前状态抽象状态(St...
阅读全文
摘要:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己角色抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayL...
阅读全文
摘要:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类不改变算法的结构即可重复定义算法的某些特点步骤角色AbstractClass抽象类,定义算法结构,还可以提供通用实现ConcreteClass具体实现类优缺点优点:1、封装不变部分,扩展可变部分2、...
阅读全文
摘要:解释器是一种用的比较少的行为模式,其提供了一种解释语言的语法,或者表达式的方式。该模式定义了一个表达式的接口应用场景简单的语言需要解释执行而且可以将该语言中的语句表示一个抽象的语法树对于某个特定的领域出现的不断重复的问题,可以转换成一种语法规则下的语句重点必...
阅读全文
摘要:将请求封装成一个对象,从而让用户使用不同的请求吧客户端参数化。请求排队或者记录请求日志,以及支持可撤销的操作模式的使用场景系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互系统需要在不同的时间指定请求、将请求排队和执行请求系统需要支持命令的撤...
阅读全文
摘要:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系,将这些对象形成一条链,并沿着这条链传递该请求,直到有对象处理它为止使用场景多个对象能够处理同一请求,具体处理则在运行时动态确定在请求处理者不明确的时候向多个对象提交同一个请求需要动态制...
阅读全文
摘要:建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式建造者模式中的角色抽象建造者:给出一个抽象接口,定义了需要进行的工作,就像指导手册一样具体建造者:具体...
阅读全文
摘要:AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍...
阅读全文
摘要:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例饿汉式先初始化对象,类在加载内存时候创建对象public class Single{ pr...
阅读全文
摘要:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象使用场景以为是复制一个一摸一样的对象出来,所以说会在这个复制出来的对象上进行操作,避免破坏原来那一个对象理解实例在原型模式中,很多时候是由于为了操作方便,例如在工厂模式中如果需要对传入的对象做判断...
阅读全文
摘要:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂...
阅读全文
摘要:UML(Unified Modeling Language),UML规范用来描述建模的概念有,类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。这里对UML做一个简单介绍前言UNL虽然有很多功能,但平时有的最多的就是类图,时序图和用...
阅读全文
摘要:service作为后台服务,其重要性不言而喻,但很多时候service会被杀死,从而失去了我们原本想要其发挥的作用,在这种情况下我们该如何确保我们的service不被杀死就是本节需要讨论的内容了service的等级说明在了解service的等级说明以后,明白...
阅读全文
摘要:Android的新技术在不断更迭,各种bug修复也如火如荼,增量更新,插件化开发,热修复等等,数不胜数,这一节,就来盘点盘点热修复的来龙去脉热修复说明目前在热修复发面,国内众多公司都提出了解决方案,比较出名的例如阿里的Andfix,现在更新到到第三代,新名字...
阅读全文
摘要:之前分析了AsyncTask源代码,那么在使用AsyncTask的过程中,又存在什么问题呢?AsyncTask使用存在的问题AsyncTask在使用过程中,容易出像两个问题其一:线程池容量不够,抛出异常java.util.concurrent.Rejecte...
阅读全文
摘要:客户端与服务端经常进行着频繁的数据传输,而数据传输又影响着用户体验,本文就传输速率的优化,提出合理的优化建议传统的传输方案在开始的时候,采用的是xml传输,这就要使用到Serializable/Parcelable序列化以及反序列化,其传输速度之慢,基本已经...
阅读全文
摘要:前文介绍了系统的Bitmap处理方式,那么在这一节中来说一说一个第三方的开源库,又来解决图片压缩的问题话外题Android使用Bitmap处理图片,处理出来的JPEG图片质量略差,那么为什么会这样呢?这里有一个历史问题,当时skia开源引擎用来处理JPEG,...
阅读全文
摘要:Bitmap作为重要Android应用之一,在很多时候如果应用不当,很容易造成内存溢出,那么这篇文章的目的就在于探讨Bitmap的有效运用及其优化缓存介绍当多次发送请求的时候,请求同一内容,为了使资源得到合理利用,那么就需要设置缓存,避免同一内容被多次请求在...
阅读全文
摘要:Android在不使用的时候,屏幕在一段时间以后会变暗,再过一段时间就会熄屏,此时CPU就会休眠,那么在这个时候,Timer、Handler、Thread、Service等都会暂停,有时候我们需要屏幕常亮,有时候需要熄屏后CPU仍然运作,那么这就是本文记录的...
阅读全文
摘要:电量的优化在app开发过程中,往往会被忽视,当在实际使用过程中,用户会很关心app的耗电量,耗电量高的应用会使用户对应用产生质疑,甚至卸载应用检测工具安装使用battery-historian来监测电量的情况,battery-historian时Google...
阅读全文
摘要:在手机上显示图片,播放视频,这是很常见的手机操作,也就是屏幕的绘制在软件开发中几乎是每个应用都会打交道的,这篇文章记录了渲染机制以及如何做优化卡顿产生的原因在Activity中直接进行网络访问/大文件的IO操作还有就是自定义的View没有优化好,以上的情况都...
阅读全文
摘要:之前说了内存泄漏和检测工具,这里就记录一下常见的内存泄露有哪些前言在举例子以前,需要明白两个概念内存泄露(Memory Leak):某些对象已经不再使用,但仍然直接或间接的被引用到GC ROOT中,此时GC没法对其进行回收,就造成了内存泄露内存溢出(OOM)...
阅读全文
摘要:前文讲到了内存泄漏的原因,那么要怎么定位内存泄漏呢?这里列出了常用的分析工具及其使用方法以下Heap Snapshot、MAT、Heap Viewer、Allaction Tracking、LeakCanary和TraceView资料均来源于网络Heap S...
阅读全文
摘要:由于Java的特有属性,其垃圾回收机制的垃圾回收的时间不确定性,造成了Android的内存泄露问题,本文主要是说明一些Android中的内存泄露问题内存泄漏概念在C/C++中,堆内存的开辟和销毁是通过程序员通过malloc/free和new/delete去完...
阅读全文
摘要:由于Java的特有属性,其垃圾回收机制的垃圾回收的时间不确定性,造成了Android的内存泄露问题,本文主要是说明一些Android中的内存泄露问题内存泄漏概念在C/C++中,堆内存的开辟和销毁是通过程序员通过malloc/free和new/delete去完...
阅读全文
摘要:之前的视频解码仍然存在问题,那就是是在主线程中去完成解码的,会造成线程阻塞,这里将其改为多线程解码,使其主线程不被阻塞前面介绍了音视频的主线程解码,那样会阻塞主线程,在前面学习了多线程以后,就可以对音频和视频分离开来在子线程里解析了,但这样存在音视频同步的问...
阅读全文
摘要:之前的视频解码仍然存在问题,那就是是在主线程中去完成解码的,会造成线程阻塞,这里将其改为多线程解码,使其主线程不被阻塞前面介绍了音视频的主线程解码,那样会阻塞主线程,在前面学习了多线程以后,就可以对音频和视频分离开来在子线程里解析了,但这样存在音视频同步的问...
阅读全文
摘要:前面讲到记录到ffmpeg音视频解码的时候,采用的是在主线程中进行操作,这样是不行的,在学习了POSIX多线程操作以后,就可以实现其在子线程中解码了,也可以实现音视频同步了简单示例在native实现中,直接调用pthread的多线程方法,这样就可以在JNI层...
阅读全文
摘要:在做开发的时候,难免会crash,那么在这时候需要进行调试,在C/C++的代码调试中,gdb是很常用的gdb在这不做过多介绍,之前在C语言中已经做过总结,这里简要回顾一下要使用gdb,在编译的时候需要添加-g参数gcc test.c -g -o test进入...
阅读全文
摘要:在做开发的时候,难免会crash,那么在这时候需要进行调试,在C/C++的代码调试中,gdb是很常用的gdb在这不做过多介绍,之前在C语言中已经做过总结,这里简要回顾一下要使用gdb,在编译的时候需要添加-g参数gcc test.c -g -o test进入...
阅读全文
摘要:在做NDK开发的时候,很多情况下都是需要使用多线程的,一方面是提高程序运行效率,另一方面就是防止主线程阻塞C的多线程在C语言里,可以通过对于POSIX标准的运用,使得C语言执行多线程提高程序的执行速度,以及对资源的合理利用POSIXPOSIX原理POSIX可...
阅读全文
摘要:在做NDK开发的时候,很多情况下都是需要使用多线程的,一方面是提高程序运行效率,另一方面就是防止主线程阻塞C的多线程在C语言里,可以通过对于POSIX标准的运用,使得C语言执行多线程提高程序的执行速度,以及对资源的合理利用POSIXPOSIX原理POSIX可...
阅读全文
摘要:在Android的源代码中,随处可见Makefile,那么Makefile到底是用来干嘛的呢?其实Makefile和Maven、ANT、Gradle一样,属于构建工具,当项目比较庞大的时候,就可以使用makefile来构建项目了makefile简介一个工程中...
阅读全文
摘要:在Android的源代码中,随处可见Makefile,那么Makefile到底是用来干嘛的呢?其实Makefile和Maven、ANT、Gradle一样,属于构建工具,当项目比较庞大的时候,就可以使用makefile来构建项目了makefile简介一个工程中...
阅读全文
摘要:之前已经用他人的编译脚本对ffmpeg进行了成功编译,那么在裁剪ffmpeg的时候需要指定文件,这时候应该怎么编写编译脚本呢?本文目的在于说明ffmpeg编译脚本的编写首先在ffmpeg的目录下新建编译脚本touch android_build.sh #新建...
阅读全文
摘要:之前已经用他人的编译脚本对ffmpeg进行了成功编译,那么在裁剪ffmpeg的时候需要指定文件,这时候应该怎么编写编译脚本呢?本文目的在于说明ffmpeg编译脚本的编写首先在ffmpeg的目录下新建编译脚本touch android_build.sh #新建...
阅读全文
摘要:前文讲到音频解码,将音频解码,并且输入到PCM文件,这里将音频通过AudioTrack直接输出音频播放说明在Android中自带的MediaPlayer也可以对音频播放,但其支持格式太少使用ffmpeg可以支持更多格式常用的音频播放有很多种方式,但播放PCM...
阅读全文
摘要:在之前的文章已经初步对视频解码有个初步的认识了,接下来来看一看音频解码音频解码步骤音频解码与视频解码一样,有者固有的步骤,只要按照步骤来,就能顺利的解码音频以上是ffmpeg的解码流程图,可以看到,无论是音频还是视频,其步骤都是一样的,差别在于在视频处理和音...
阅读全文
摘要:在之前的文章已经初步对视频解码有个初步的认识了,接下来来看一看音频解码音频解码步骤音频解码与视频解码一样,有者固有的步骤,只要按照步骤来,就能顺利的解码音频以上是ffmpeg的解码流程图,可以看到,无论是音频还是视频,其步骤都是一样的,差别在于在视频处理和音...
阅读全文
摘要:上次已将ffmpeg的动态库编译出来了,并且使用了ffmpeg的转码功能,成功将mp4格式视频转化为yuv视频,这篇文章基于上次测试的demo,使用surfaceview显示解码完成的像素数据布局设置和权限添加布局 权限编写自定义vie...
阅读全文
摘要:上次已将ffmpeg的动态库编译出来了,并且使用了ffmpeg的转码功能,成功将mp4格式视频转化为yuv视频,这篇文章基于上次测试的demo,使用surfaceview显示解码完成的像素数据布局设置和权限添加布局 权限编写自定义vie...
阅读全文
摘要:Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库文件准备要编译生成Android需要以下文件NDKffmpeg源代码NDK下载NDK可以去Google下载,也可以在国内一些Android网站下载这里推荐两...
阅读全文
摘要:Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库文件准备要编译生成Android需要以下文件NDKffmpeg源代码NDK下载NDK可以去Google下载,也可以在国内一些Android网站下载这里推荐两...
阅读全文
摘要:ffmpeg官网提供了window平台下额开发工具供开发者使用,这篇文章主要以3.2版本的ffmpeg作为演示,记录在VS2013下,怎么去编译ffmpeg下载在官网中,按照以下步骤下载下载Windows版选择需要的版本下载版本这里接下来就是选择版本,这里我...
阅读全文
摘要:ffmpeg官网提供了window平台下额开发工具供开发者使用,这篇文章主要以3.2版本的ffmpeg作为演示,记录在VS2013下,怎么去编译ffmpeg下载在官网中,按照以下步骤下载下载Windows版选择需要的版本下载版本这里接下来就是选择版本,这里我...
阅读全文
摘要:ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习音视频基础知识视频播放器的原理播放视频的流程大致如下:常用播放器跨平台VLC,Mplayer,ffplay等Window...
阅读全文
摘要:ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习音视频基础知识视频播放器的原理播放视频的流程大致如下:常用播放器跨平台VLC,Mplayer,ffplay等Window...
阅读全文
摘要:前面将的都是如何使用C/C++文件生成so动态库,那么在使用别人的so动态库的时候应该怎么做呢?这篇文章就是使用一个变声功能的动态库,完成对于以有so动态库的说明。动态库来源在互联网中,有着许许多多动态库,很多厂商也对外提供动态库供开发者调用,例如高德地图的...
阅读全文
摘要:前面将的都是如何使用C/C++文件生成so动态库,那么在使用别人的so动态库的时候应该怎么做呢?这篇文章就是使用一个变声功能的动态库,完成对于以有so动态库的说明。动态库来源在互联网中,有着许许多多动态库,很多厂商也对外提供动态库供开发者调用,例如高德地图的...
阅读全文
摘要:虽然现在有插件化开发和热修复,但为何还需要增量更新?插件化开发和热修复依赖于宿主程序,增量更新适合更新宿主程序。差分包生成的前提差分包的生成依赖于BsDiff开源项目,而BsDiff又依赖于Bzip2BsDiff源代码下载地址:BsDiffBzip2源代码下...
阅读全文
摘要:虽然现在有插件化开发和热修复,但为何还需要增量更新?插件化开发和热修复依赖于宿主程序,增量更新适合更新宿主程序。差分包生成的前提差分包的生成依赖于BsDiff开源项目,而BsDiff又依赖于Bzip2BsDiff源代码下载地址:BsDiffBzip2源代码下...
阅读全文
摘要:文件的拆分与合并在开发中经常会用到,上传或是下载的时候都有这样的运用文件拆分的思路将文件大小拆分为n个文件那么,每个文件的大小就是等大小的如果文件大小被n除不尽,那么就使用n+1个文件来拆分最后一个文件的大小就是整除不尽的那一部分数据文件合并的思路将拆分出来...
阅读全文
摘要:文件的拆分与合并在开发中经常会用到,上传或是下载的时候都有这样的运用文件拆分的思路将文件大小拆分为n个文件那么,每个文件的大小就是等大小的如果文件大小被n除不尽,那么就使用n+1个文件来拆分最后一个文件的大小就是整除不尽的那一部分数据文件合并的思路将拆分出来...
阅读全文
摘要:本文主要是说明一下在eclipse下如何对NDK进行配置配置NDK虽然现在基本上都使用Android Studio进行Android开发,但一些项目在eclipse中仍有运用,这里讲一讲eclipse的NDK配置在最开始下载的adt里面是没有NDK这个选项的...
阅读全文
摘要:本文主要是说明一下在eclipse下如何对NDK进行配置配置NDK虽然现在基本上都使用Android Studio进行Android开发,但一些项目在eclipse中仍有运用,这里讲一讲eclipse的NDK配置在最开始下载的adt里面是没有NDK这个选项的...
阅读全文
摘要:在使用JNI的时候,可能会产生异常,此时就需要对异常进行处理异常处理JNI抛出Throwable异常,在Java层可以用Throwable捕捉而在C只有清空异常这种处理但如果在JNI中通过ThrowNew抛出异常,则在Java曾可以捕获例子(在native访...
阅读全文
摘要:在使用JNI的时候,可能会产生异常,此时就需要对异常进行处理异常处理JNI抛出Throwable异常,在Java层可以用Throwable捕捉而在C只有清空异常这种处理但如果在JNI中通过ThrowNew抛出异常,则在Java曾可以捕获例子(在native访...
阅读全文
摘要:JNI中的引用意在告知虚拟机何时回收一个JNI变量JNI引用变量分为局部引用和全局引用局部引用局部引用,通过DeletLocalRef手动释放对象原因访问一个很大的Java对象,使用之后还用进行复杂的耗时操作创建了大量的局部引用,占用了太多的内存,而且这些局...
阅读全文
摘要:JNI中的引用意在告知虚拟机何时回收一个JNI变量JNI引用变量分为局部引用和全局引用局部引用局部引用,通过DeletLocalRef手动释放对象原因访问一个很大的Java对象,使用之后还用进行复杂的耗时操作创建了大量的局部引用,占用了太多的内存,而且这些局...
阅读全文
摘要:JNI实现了C/C++与Java的相互访问,那么这篇文章就从C/C++访问Java开始说起native函数说明每个native函数,都至少有两个参数(JNIEnv *和jclass或jobject)当native方法为静态方法时,采用jclass,此时jcl...
阅读全文
摘要:JNI实现了C/C++与Java的相互访问,那么这篇文章就从C/C++访问Java开始说起native函数说明每个native函数,都至少有两个参数(JNIEnv *和jclass或jobject)当native方法为静态方法时,采用jclass,此时jcl...
阅读全文
摘要:JNI(Java Native Interface)Java本地化接口,Java调用C/C++,C/C++调用Java的一套API接口实现步骤在Java源文件中编写native方法public native static String getStringFr...
阅读全文
摘要:JNI(Java Native Interface)Java本地化接口,Java调用C/C++,C/C++调用Java的一套API接口实现步骤在Java源文件中编写native方法public native static String getStringFr...
阅读全文
摘要:本文简要回顾了C语言的一些注意事项和理解细节,不再赘述C语言的所有语法头文件头文件作为引入文件,在编译的时候,加载到源代码,参与编译在VS2013中可以看到,当引入头文件时候,只能看到函数的声明,其实现是在编译时候查找的C的动态库函数不可重名,而C++可以,...
阅读全文
摘要:本文简要回顾了C语言的一些注意事项和理解细节,不再赘述C语言的所有语法头文件头文件作为引入文件,在编译的时候,加载到源代码,参与编译在VS2013中可以看到,当引入头文件时候,只能看到函数的声明,其实现是在编译时候查找的C的动态库函数不可重名,而C++可以,...
阅读全文
摘要:shell的知识点并不多,这里简单介绍一下常用的一些东西常用命令echo显示普通字符串echo "test"显示转义字符echo "\"test\""显示变量echo "$key"显示换行echo -e "OK! \n" # -e 开启转义显示不换行echo...
阅读全文
摘要:shell的知识点并不多,这里简单介绍一下常用的一些东西常用命令echo显示普通字符串echo "test"显示转义字符echo "\"test\""显示变量echo "$key"显示换行echo -e "OK! \n" # -e 开启转义显示不换行echo...
阅读全文
摘要:shell里面也有流程控制,其使用方法与C和Java类似,不过也存在差别if elseif语法格式if conditionthen command1 command2 ... commandN fiif语句也可以写在一行if [ $...
阅读全文
摘要:shell里面也有流程控制,其使用方法与C和Java类似,不过也存在差别if elseif语法格式if conditionthen command1 command2 ... commandN fiif语句也可以写在一行if [ $...
阅读全文
摘要:原生shell不支持数学运算,一般通过其他命令得以实现shell运算概述shell内的运算通常由expr命令实现val=`expr 2 + 2`echo $val这里值得注意的有两点,第一,在计算时候,因子之间必须存在空格,第二,这个计算是要让外部去执行的,...
阅读全文
摘要:原生shell不支持数学运算,一般通过其他命令得以实现shell运算概述shell内的运算通常由expr命令实现val=`expr 2 + 2`echo $val这里值得注意的有两点,第一,在计算时候,因子之间必须存在空格,第二,这个计算是要让外部去执行的,...
阅读全文
摘要:Linux的Shell有很多种,常见的有Bourne Shell Bourne Again Shell C Shell K Shell Shell for Root等,其中Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,...
阅读全文
摘要:Linux的Shell有很多种,常见的有Bourne Shell Bourne Again Shell C Shell K Shell Shell for Root等,其中Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,...
阅读全文
摘要:json数据是常见的一种互联网传输数据格式,这里记录了json解析的通用方法JSON(JavaScript Object Notation)JavaScript对象表示法一种简单的数据格式,比xml更轻巧。JSON是JavaScript的原生格式,这意味着在...
阅读全文
摘要:json数据是常见的一种互联网传输数据格式,这里记录了json解析的通用方法JSON(JavaScript Object Notation)JavaScript对象表示法一种简单的数据格式,比xml更轻巧。JSON是JavaScript的原生格式,这意味着在...
阅读全文
摘要:xml:可扩展标记语言,类似于HTML,用于传输或者描述数据XML应用在客户端(client)/服务器(server)之间传递数据用来保存有关系的数据用来做配置文件,在Android当中的布局文件和清单文件语法文档声明声明必须在第一行,最简单的声明encod...
阅读全文
摘要:xml:可扩展标记语言,类似于HTML,用于传输或者描述数据XML应用在客户端(client)/服务器(server)之间传递数据用来保存有关系的数据用来做配置文件,在Android当中的布局文件和清单文件语法文档声明声明必须在第一行,最简单的声明encod...
阅读全文
摘要:java类库的基本介绍与用户互动运行Java程序的参数main()方法分析public修饰符:Java类由JVM调用,为了让JVM可以自由调用这个main()方法,所以使用public修饰符把这个方法暴露出来static修饰符:JVM调用这个主方法时,不会先...
阅读全文
摘要:java类库的基本介绍与用户互动运行Java程序的参数main()方法分析public修饰符:Java类由JVM调用,为了让JVM可以自由调用这个main()方法,所以使用public修饰符把这个方法暴露出来static修饰符:JVM调用这个主方法时,不会先...
阅读全文
摘要:基于TV settings和SettingsProviderAndroid启动模式对activity行为的影响AndroidManifest.xml文件详解Manifest文件中,application和activity标签属性详解android之manif...
阅读全文
摘要:基于TV settings和SettingsProviderAndroid启动模式对activity行为的影响AndroidManifest.xml文件详解Manifest文件中,application和activity标签属性详解android之manif...
阅读全文
摘要:排序是计算机内经常进行的一种操作,其目的是将一组无序的数据元素调整为有序的数据元素排序的概念排序数学定义:假设含n个数据元素的序列为{ R1, R2, ···, Rn}其相应的关键字序列为{ K1, K2, ···, Kn}这些关键字相互之间可以进行比较,即...
阅读全文
摘要:排序是计算机内经常进行的一种操作,其目的是将一组无序的数据元素调整为有序的数据元素排序的概念排序数学定义:假设含n个数据元素的序列为{ R1, R2, ···, Rn}其相应的关键字序列为{ K1, K2, ···, Kn}这些关键字相互之间可以进行比较,即...
阅读全文
摘要:树是一种非线性结构,有一个前驱,可能有多个后继(1:n)的数据结构树的基本知识树的定义由一个或多个(n≥0)结点组成的有限集合T,有且仅有一个结点称为根(root),当n>1时,其余的结点分为m(m≥0)个互不相交的有限集合T1,T2,···,Tm。每个集合...
阅读全文
摘要:树是一种非线性结构,有一个前驱,可能有多个后继(1:n)的数据结构树的基本知识树的定义由一个或多个(n≥0)结点组成的有限集合T,有且仅有一个结点称为根(root),当n>1时,其余的结点分为m(m≥0)个互不相交的有限集合T1,T2,···,Tm。每个集合...
阅读全文
摘要:队列和stack类似,stack是先进后出,而queue的先进先出,也是一种特殊的线性表基本概念概念队列是一种特殊的线性表队列仅在线性表的两端进行操作队头(Front):取出数据元素的一端队尾(Rear):插入数据元素的一端队列不允许在中间部位进行操作常用操...
阅读全文
摘要:队列和stack类似,stack是先进后出,而queue的先进先出,也是一种特殊的线性表基本概念概念队列是一种特殊的线性表队列仅在线性表的两端进行操作队头(Front):取出数据元素的一端队尾(Rear):插入数据元素的一端队列不允许在中间部位进行操作常用操...
阅读全文
摘要:栈的本质是一种线性表,特殊的一种线性表基本概念概念栈是一种特殊的线性表栈仅能在线性表的一端进行操作栈顶(Top):允许操作的一端栈底(Bottom):不允许操作的一端stack是一种线性表,具有线性关系,即前驱后继关系,由于其比较特殊,增加和删除元素只能在栈...
阅读全文
摘要:栈的本质是一种线性表,特殊的一种线性表基本概念概念栈是一种特殊的线性表栈仅能在线性表的一端进行操作栈顶(Top):允许操作的一端栈底(Bottom):不允许操作的一端stack是一种线性表,具有线性关系,即前驱后继关系,由于其比较特殊,增加和删除元素只能在栈...
阅读全文
摘要:线性表作为一种常用的数据结构,在实际中有着广泛的运用。线性表基本概念线性表定义线性表(List)是零个或多个数据元素的集合线性表中的数据元素之间是有顺序的线性表中的数据元素个数是有限的线性表中的数据元素的类型必须相同数学定义线性表是具有相同类型的 n( ≥ ...
阅读全文
摘要:线性表作为一种常用的数据结构,在实际中有着广泛的运用。线性表基本概念线性表定义线性表(List)是零个或多个数据元素的集合线性表中的数据元素之间是有顺序的线性表中的数据元素个数是有限的线性表中的数据元素的类型必须相同数学定义线性表是具有相同类型的 n( ≥ ...
阅读全文
摘要:计算机从解决数值计算问题到解决生活中的问题现实生活中的问题涉及不同个体间的复杂联系需要在计算机程序中描述生活中个体间的联系数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系而不是研究复杂的算法数据结构基本概念数据:程序的操作对象,用于描述客观事...
阅读全文
摘要:计算机从解决数值计算问题到解决生活中的问题现实生活中的问题涉及不同个体间的复杂联系需要在计算机程序中描述生活中个体间的联系数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系而不是研究复杂的算法数据结构基本概念数据:程序的操作对象,用于描述客观事...
阅读全文
摘要:程序设计的要求之一就是程序的健壮性。希望程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素会导致程序不能正常运行。异常处理(Exception Handling)就是要提出或者是研究一种机制,能够较好的处理程序不能正常运行的问题异常和...
阅读全文
摘要:程序设计的要求之一就是程序的健壮性。希望程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素会导致程序不能正常运行。异常处理(Exception Handling)就是要提出或者是研究一种机制,能够较好的处理程序不能正常运行的问题异常和...
阅读全文
摘要:C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等导入抽象的重要性计算机科学的重要进步,...
阅读全文
摘要:C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等导入抽象的重要性计算机科学的重要进步,...
阅读全文
摘要:模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。什么是模板类属——类型参数化,又称参数模板使得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递C...
阅读全文
摘要:模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。什么是模板类属——类型参数化,又称参数模板使得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递C...
阅读全文
摘要:深入了解多态的实现原理,有助于提高对于多态的认识多态基础多态的实现效果多态:同样的调用语句有多种不同的表现形态多态实现的三个条件有继承、有virtual重写、有父类指针(引用)指向子类对象多态的C++实现virtual关键字,告诉编译器这个函数要支持多态;不...
阅读全文
摘要:深入了解多态的实现原理,有助于提高对于多态的认识多态基础多态的实现效果多态:同样的调用语句有多种不同的表现形态多态实现的三个条件有继承、有virtual重写、有父类指针(引用)指向子类对象多态的C++实现virtual关键字,告诉编译器这个函数要支持多态;不...
阅读全文
摘要:多态作为面向对象的重要概念,在如何一门面向对象编程语言中都有着举足轻重的作用,学习多态,有助于更好地理多态的行为多态性(Polymorphism)是指一个名字,多种语义;或界面相同,多种实现。重载函数是多态性的一种简单形式。虚函数允许函数调用与函数体的联系在...
阅读全文
摘要:多态作为面向对象的重要概念,在如何一门面向对象编程语言中都有着举足轻重的作用,学习多态,有助于更好地理多态的行为多态性(Polymorphism)是指一个名字,多种语义;或界面相同,多种实现。重载函数是多态性的一种简单形式。虚函数允许函数调用与函数体的联系在...
阅读全文
摘要:C++存在构造函数与析构函数,继承中也存在构造和析构函数。继承中的构造和析构函数与普通的构造析构有细微差别。赋值兼容性原则#include "iostream"using namespace std;class Parent{public: void pri...
阅读全文
摘要:C++存在构造函数与析构函数,继承中也存在构造和析构函数。继承中的构造和析构函数与普通的构造析构有细微差别。赋值兼容性原则#include "iostream"using namespace std;class Parent{public: void pri...
阅读全文
摘要:类之间可以建立联系,这就使得类可以有某种关系类之间的关系has-A:包含关系,一个类使用另一个已经定义好的类的数据uses-A:使用关系,友元或者对象参数传递is-A:是的关系,这就是继承,具有传递性不具有对称性继承是类之间定义的一种重要关系,一个B类继承A...
阅读全文
摘要:封装所谓封装就是将某些东西包装盒隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口以及特定的访问权限来使用类的成员。类通常分为以下两个部分类的实现细节类的使用方式封...
阅读全文
摘要:类之间可以建立联系,这就使得类可以有某种关系类之间的关系has-A:包含关系,一个类使用另一个已经定义好的类的数据uses-A:使用关系,友元或者对象参数传递is-A:是的关系,这就是继承,具有传递性不具有对称性继承是类之间定义的一种重要关系,一个B类继承A...
阅读全文
摘要:运算符重载使得用户自定义的数据以一种更简洁的方式工作运算符重载规则重载运算符的限制可以重载的运算符+-*/%^&|~!=+=-=*=/=%=^=&=|=>>>==&&||++--->*' ->[]()newdeletenew[]delete[]不能重载的算符...
阅读全文
摘要:运算符重载使得用户自定义的数据以一种更简洁的方式工作运算符重载规则重载运算符的限制可以重载的运算符+-*/%^&|~!=+=-=*=/=%=^=&=|=>>>==&&||++--->*' ->[]()newdeletenew[]delete[]不能重载的算符...
阅读全文
摘要:C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段和代码段构成。那么C++编译器如何完成面向对象理论到计算机程序的转化的呢?换句话说,C++编译器是如何管理类、对象、类...
阅读全文
摘要:C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段和代码段构成。那么C++编译器如何完成面向对象理论到计算机程序的转化的呢?换句话说,C++编译器是如何管理类、对象、类...
阅读全文
摘要:static做为关键字,在C++语言中运用在类中,代表着这个属性或者方法属于这个类如果生成的对象修改了这个成员,那么其他对象共享修改后的值定义和初始化class ABC{public: int getC() { return c; } void setC(...
阅读全文
摘要:static做为关键字,在C++语言中运用在类中,代表着这个属性或者方法属于这个类如果生成的对象修改了这个成员,那么其他对象共享修改后的值定义和初始化class ABC{public: int getC() { return c; } void setC(...
阅读全文
摘要:C++新增了new和delete关键字,用来开辟内存,对应的就是C语言的malloc和free对比new/delete和malloc/freemalloc和free是库函数,以字节为单位申请堆内存new和delete是关键字,以类型为单位申请堆内存mallo...
阅读全文
摘要:C++新增了new和delete关键字,用来开辟内存,对应的就是C语言的malloc和free对比new/delete和malloc/freemalloc和free是库函数,以字节为单位申请堆内存new和delete是关键字,以类型为单位申请堆内存mallo...
阅读全文
摘要:C++中的浅拷贝是产生很多问题的根本原因,其根本原因是在有指针的时候,只是拷贝了一个指针的值,多个指针指向同一块内存区域,当free内存时,造成其他指针指向的空间不存在。结合构造函数和析构函数理解浅拷贝是一个不错的选择原始程序#include "iostre...
阅读全文
摘要:C++中的浅拷贝是产生很多问题的根本原因,其根本原因是在有指针的时候,只是拷贝了一个指针的值,多个指针指向同一块内存区域,当free内存时,造成其他指针指向的空间不存在。结合构造函数和析构函数理解浅拷贝是一个不错的选择原始程序#include "iostre...
阅读全文
摘要:构造函数和析构函数是C++的重要组成部分,了解构造函数和析构函数有助于深入了解C++构造函数构造函数产生的原因在C++中,有时候需要在对象创建的时候初始化数据,如果采用普通函数的话,每次初始化都要调用函数,显得麻烦,另外,如果忘记初始化,那么其结果是未知的。...
阅读全文
摘要:构造函数和析构函数是C++的重要组成部分,了解构造函数和析构函数有助于深入了解C++构造函数构造函数产生的原因在C++中,有时候需要在对象创建的时候初始化数据,如果采用普通函数的话,每次初始化都要调用函数,显得麻烦,另外,如果忘记初始化,那么其结果是未知的。...
阅读全文
摘要:内联函数内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质inline关键字只是给编译器一个建议,编译器不一定会接受这种建议。一些编译器,会将简单的函数做内联编译,...
阅读全文
摘要:内联函数内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质inline关键字只是给编译器一个建议,编译器不一定会接受这种建议。一些编译器,会将简单的函数做内联编译,...
阅读全文
摘要:引用是C语言中没有,而在C++中又很重要的一个概念,通过应用,可以得到变量本身,相对于得到变量的值而言,有更大的操作空间。普通引用变量的本质变量名实质上是一段连续存储空间的别名,是一个标号程序中通过变量来申请并命名内存空间通过变量的名字可以使用存储空间引用是...
阅读全文
摘要:引用是C语言中没有,而在C++中又很重要的一个概念,通过应用,可以得到变量本身,相对于得到变量的值而言,有更大的操作空间。普通引用变量的本质变量名实质上是一段连续存储空间的别名,是一个标号程序中通过变量来申请并命名内存空间通过变量的名字可以使用存储空间引用是...
阅读全文
摘要:const在C++中有着大量的运用,深刻理解const有助于进一步理解C++。const基础知识int main(){ const int a;//C++中必须初始化 int const b;//C++中必须初始化 const int *c...
阅读全文
摘要:const在C++中有着大量的运用,深刻理解const有助于进一步理解C++。const基础知识int main(){ const int a;//C++中必须初始化 int const b;//C++中必须初始化 const int *c...
阅读全文
摘要:指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中关于iostream和格式不一样,前者没有后缀,实际上,这是由于第一版c++编译器的不成熟造成的,后来取消了.h的后缀格式,c++标准为了和C区别开,也为了正...
阅读全文
摘要:指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中关于iostream和格式不一样,前者没有后缀,实际上,这是由于第一版c++编译器的不成熟造成的,后来取消了.h的后缀格式,c++标准为了和C区别开,也为了正...
阅读全文
摘要:C++兼容C,在C的基础上学习C++是一个不错的选择,也能够更好的了解C与C++的区别与联系。变量定义C语言中的变量都必须在作用域开始的位置定义C++中更强调语言的实用性,所有的变量都可以在需要使用时再定义int main(){ int i = 0; pri...
阅读全文
摘要:C++兼容C,在C的基础上学习C++是一个不错的选择,也能够更好的了解C与C++的区别与联系。变量定义C语言中的变量都必须在作用域开始的位置定义C++中更强调语言的实用性,所有的变量都可以在需要使用时再定义int main(){ int i = 0; pri...
阅读全文
摘要:本文主要是整理一些C++与C的一些小的区别,也就是在使用C与C++时候需要注意的一些问题,C++是以C语言为基础的,并且完全兼容C语言的特性注释C语言的注释形式为/*注释内容*/而C++提供了另一种新的注释方式//注释内容但在C的发展过程中,慢慢接受了C++...
阅读全文
摘要:本文主要是整理一些C++与C的一些小的区别,也就是在使用C与C++时候需要注意的一些问题,C++是以C语言为基础的,并且完全兼容C语言的特性注释C语言的注释形式为/*注释内容*/而C++提供了另一种新的注释方式//注释内容但在C的发展过程中,慢慢接受了C++...
阅读全文
摘要:字符串函数是最问常用的库函数之一,本文整理了常用的字符串函数,其来源为互联网函数名: stpcpy功 能: 拷贝一个字符串到另一个用 法: char *stpcpy(char *destin, char *source);程序例:#include #in...
阅读全文
摘要:字符串函数是最问常用的库函数之一,本文整理了常用的字符串函数,其来源为互联网函数名: stpcpy功 能: 拷贝一个字符串到另一个用 法: char *stpcpy(char *destin, char *source);程序例:#include #in...
阅读全文
摘要:gdb即GNU debugger,用来调试程序gdb使用前提要使用gdb,则需要在编译源代码时候使用-g参数gcc -g –o test test.c启动gdbgdb 程序名 [corefile]corefile是可选的,但能增强gdb的调试能力Linux默...
阅读全文
摘要:函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作。函数类型基础函数三要素: 名称、参数、返回值C语言中的函数有自己特定的类型C语言中通过typedef为函数类型重命名,类似于...
阅读全文
摘要:函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作。函数类型基础函数三要素: 名称、参数、返回值C语言中的函数有自己特定的类型C语言中通过typedef为函数类型重命名,类似于...
阅读全文
摘要:结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址结构体定义struct Man{ char name[64]; int age;};结构体可以与typedef结合使用typedef struct _Man{ ch...
阅读全文
摘要:结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址结构体定义struct Man{ char name[64]; int age;};结构体可以与typedef结合使用typedef struct _Man{ ch...
阅读全文
摘要:数组,作为C语言中常见的复杂数据类型,了解其本质有助于深入了解C语言数组概念元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小内存角度:联系的一大片内存空间数组初始化数组元素的个数可以显示或隐式指定数组的初始化可以用{ 0 },也可以使...
阅读全文
摘要:数组,作为C语言中常见的复杂数据类型,了解其本质有助于深入了解C语言数组概念元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小内存角度:联系的一大片内存空间数组初始化数组元素的个数可以显示或隐式指定数组的初始化可以用{ 0 },也可以使...
阅读全文
摘要:二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别第一种内存模型char *arr[]若有如下定义char *arr[] = {"abc", "def", "ghi"};这种模型为二级指针的第一种内存...
阅读全文
摘要:二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别第一种内存模型char *arr[]若有如下定义char *arr[] = {"abc", "def", "ghi"};这种模型为二级指针的第一种内存...
阅读全文
摘要:数组与指针当数组做函数参数的时候,会退化为一个指针此时在函数内是得不到数组大小的因此,数组做函数参数的时候需要传递数组大小,也就是多传递一个参数void func(int arr[], int num){ ···}若存在以上函数,c/c++编译器在编译...
阅读全文
摘要:数组与指针当数组做函数参数的时候,会退化为一个指针此时在函数内是得不到数组大小的因此,数组做函数参数的时候需要传递数组大小,也就是多传递一个参数void func(int arr[], int num){ ···}若存在以上函数,c/c++编译器在编译...
阅读全文
摘要:断层思维在设计时候,不需要知道实现,只需要知道如何使用接口设计的设计思路Sckclient客户端api模型第一套API(*.h)#ifndef _SCK_CLINT_H_#define _SCK_CLINT_H_#ifdef __cplusplusexte...
阅读全文
摘要:断层思维在设计时候,不需要知道实现,只需要知道如何使用接口设计的设计思路Sckclient客户端api模型第一套API(*.h)#ifndef _SCK_CLINT_H_#define _SCK_CLINT_H_#ifdef __cplusplusexte...
阅读全文
摘要:改变空指针内存的值这个错误很常见,不仅是空指针,还包括改变系统内存空间的值int *p = NULL;···*p = 10;没有释放内存或者释放位置不对在堆中开辟内存以后,使用完成必须释放内存,否则会造成内存泄漏int *p = (int *)malloc(...
阅读全文
摘要:改变空指针内存的值这个错误很常见,不仅是空指针,还包括改变系统内存空间的值int *p = NULL;···*p = 10;没有释放内存或者释放位置不对在堆中开辟内存以后,使用完成必须释放内存,否则会造成内存泄漏int *p = (int *)malloc(...
阅读全文
摘要:关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏。其实指针并不复杂,学习指针,要正确的理解指针。指针是一种数据类型指针也是一种变量,占有内存空间,用来保存内存地址指针就是告诉编译器,开辟4个字节的存储空间(32位系统),无论是几级指针都是一样...
阅读全文
摘要:关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏。其实指针并不复杂,学习指针,要正确的理解指针。指针是一种数据类型指针也是一种变量,占有内存空间,用来保存内存地址指针就是告诉编译器,开辟4个字节的存储空间(32位系统),无论是几级指针都是一样...
阅读全文
摘要:void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据void含义void几乎只有注释和限制程序的作用,定义一个void变量没有意义void的真正作用在于对函数返回的限定对函数参数的限定在C语言中,void *可以...
阅读全文
摘要:void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据void含义void几乎只有注释和限制程序的作用,定义一个void变量没有意义void的真正作用在于对函数返回的限定对函数参数的限定在C语言中,void *可以...
阅读全文
摘要:GNU CC(通常称为GCC)是GNU项目的编译器,它能够编译C、C++语言编写的程序gcc的优点使用gcc,程序员可以控制生成二进制执行文件中调试代码的数量和类型。和其他编译器一样,gcc也可以优化执行代码。gcc是个交叉平台编译器,所以能够在当前CPU平...
阅读全文
摘要:GNU CC(通常称为GCC)是GNU项目的编译器,它能够编译C、C++语言编写的程序gcc的优点使用gcc,程序员可以控制生成二进制执行文件中调试代码的数量和类型。和其他编译器一样,gcc也可以优化执行代码。gcc是个交叉平台编译器,所以能够在当前CPU平...
阅读全文
摘要:除非最简单的项目,任何一个商业项目都会包含多个源代码,而且在编译的时候会有很长很复杂的指令,为了编译的简单可行,makefile由此而生,在编译时候直接输入make便会按照makefile里面的规则编译源代码。Android的源代码就是通过makefile管...
阅读全文
摘要:除非最简单的项目,任何一个商业项目都会包含多个源代码,而且在编译的时候会有很长很复杂的指令,为了编译的简单可行,makefile由此而生,在编译时候直接输入make便会按照makefile里面的规则编译源代码。Android的源代码就是通过makefile管...
阅读全文
摘要:数据结构数据(data)是对客观事物符号表示,在计算机中是指所有能输入的计算机并被计算机程序处理的数据总称。数据元素(data element)是数据的基本单位,在计算机中通常做为一个整体进行处理。数据对象(data object)是性质相同的数据元素的集合...
阅读全文