自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (2)
  • 收藏
  • 关注

原创 OpenSL ES

概述: OpenSL ES 是一款跨平台、硬件加速的音频API,适用于嵌入式系统,他为嵌入式多媒体设备上的本机应用程序开发人员提供标准化,高性能、低延时的方法来访问音频功能,实现硬件和软件音频功能的跨平台部署,减少实施工作量。简单来说OpenSL ES是一个嵌入式跨平台免费的音频处理库.流程: OpenSL ES的开发流程主要有以下几步: 1、创建接口对象...

2019-09-16 14:53:06 540 1

原创 Android 源码分析(一)

之前从来没有仔细研究过Android源代码,对Android的理解不够,为了让自己能够更上一层楼,今后开始研究源码。首先介绍一下源码文件目录:根目录 描述 art 一种app运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性 abi abi相关代码,应用程序二进制接口 bionic bionic C库 bootable ...

2019-07-30 21:52:35 218

原创 mmap源码分析

函数原型void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);虚拟内存管理从内核的角度来看,虚拟空间的管理是以进程为基础的,每个进程都有自己的虚存空间,除此之外,每个进程的内核空间是所有进程共享的。一个进程的虚拟空间由两个数据结构来描述mm_struct和...

2019-06-28 16:27:04 1247 1

原创 c/c++字符const

const char * ptr定义一个指向字符串常量的指针,这里,ptr是一个指向char类型的常量,所以不能用ptr来修改所指向的内容,换句话说,ptr的值是const,不能修改char str[] = "asddfg";const char * ptr = str;for (int i = 0; i < 6; i++) { printf("%c ",ptr[i])...

2019-06-27 11:42:35 153

原创 C语言——内存四驱模型

C语言——内存四驱模型堆区栈区代码区数据区在C/C++运行时将数据分为四个区域:堆区、栈区、代码区和数据区。堆区一般由程序员申请与释放(动态内存的申请与释放),若程序员不释放,在程序运行结束后,可能由操作系统进行回收栈区由编译器自动分配释放,存放函数的参数值,局部变量等代码区存放函数体的二进制代码,即:函数指令数据区存放全局变量、静态变量和常量字符串等等。 程序结束后由系统...

2019-06-06 13:37:01 293

原创 C++——STL

C++——STL六大组件容器算法迭代器仿函数适配器空间配置器STL的三大组件容器算法迭代器长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,让程序员的心血不止于随时间的迁移,人事异动而烟消云散,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模...

2019-05-29 11:42:26 517

原创 C++概述

1.C++简介C++中的++来自C语言的递增运算符++,该运算符将变量+1,c++是对C的扩展,因此c++是c语言的超集,这意味着任何有效的c程序都是有效的c++程序。c++程序可以使用已有的c程序库C++在C语言的基础上增加了面向对象编程和泛型编程的支持,C++继承了C语言高效,简洁、快速和可移植的传统。C++和C语言的关系:C++是C语言的加强,是一种更好的C语言C++是以...

2019-05-23 15:59:27 385

原创 C++——引用

C++引用: C++中引用是一个别名,也就是说,它是已经某个已存在变量的另一个名字,一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量C++引用和指针:引用和指针很容易混淆,但他们之间有以下区别: 1.引用不存在空引用,引用必须连接到某块合法空间 2.一旦引用被初始化为一个对象,就不能指向另一个对象 3.引用必须在创建时初...

2019-05-23 14:29:58 170

原创 C语言——操作符

C语言中操作符的使用算术操作符移位操作符位操作符赋值符单目操作符关系操作符逻辑操作符条件操作符逗号操作符算术操作符“+”、"-"、"*"、"/"、"%"移位操作符左移操作符:<< 右移操作符:>>移位操作只是简单的把一个值的位向左或右移动。在左移位中,值最左边的几位被丢弃,右边多出来的几个空位由0补齐。在右移位中,存在左移位操作不曾面临的问题:从左边移...

2019-05-20 13:58:54 235

原创 C语言——内存分配

Serializable和Parcelable的区别为什么要使用动态分配内存malloccallocrealloc为什么要使用动态分配内存当你声明数组时,你必须使用一个编译时常量指定数组的长度,但是,数组的长度通常在运行时才知道,这是由于他的内存空间取决于输入数据。但是如果程序需要使用的元素数量超过了声明的长度,就必须要通过执行动态分配内存。malloc当一个程序需要另外的内存时,它就调...

2019-05-17 14:37:36 374

原创 序列化Serializable和Parcelable的区别

Serializable和Parcelable的区别序列化什么是序列化什么情况下需要使用序列化SerializableParcelableParcelable和Serializable的区别和比较选择序列化方法的原则序列化什么是序列化将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其状态写入到临时存储区或持久性存储区,之后便可以从存储区中读取或反序列化对象的状态信息,来...

2019-05-16 15:49:06 2300

转载 C语言——文件操作

C语言——文件操作文件操作文件的分类文件的打开和关闭文件的顺序读写文件操作数据的输入和输出基本伴随着整个C程序,输入就是从“源端”获取数据,输出就是向终端写入数据文件的分类计算机上的各种资源都是由操作系统管理和控制的,操作系统中的文件系统,是专门负责将外部存储设备中的信息组织方式进行统一管理规划,以便为程序访问数据提供统一的方式。文件是操作系统管理数据的基本单位,文件一般是指存储在外部存...

2019-05-16 11:31:54 163

原创 ffmpeg基础知识三——常用方法解析

1、av_register_all():该函数在所有基于ffmpeg的应用程序中几乎都是第一个被调用的。只有调用了该函数,才能使用复用器,编码器等2、av_malloc():是FFmpeg最常见的分配内存函数,av_malloc()就是简单的封装了系统函数malloc(),并做了一些错误检查工作void *av_malloc(size_t size){ void *ptr = ...

2019-05-13 16:17:08 1175

原创 ffmpeg基础知识二

常用库:avcodec:编解码(最重要的库)avformat:封装格式处理avfilter:滤镜特效处理avdevice:各种设备的输入输出avutil:工具库(大部分库都需要该库支持)postproc:后加工swresample:音频采样数据格式转换swscale:视频像素数据格式转换常用数据结构:AVFormatContext:typedef...

2019-05-08 10:37:32 969

原创 ffmpeg基础知识

序: 什么是影片:实际上就是很多张图片,在间隔时间很短的连续展示出来。电影实际上就是很多张图片的集合。如果我们原封不动的保存起来,纳闷占用空间会很大,如果我们使用算法将其压缩一下,变成帧,在将帧变成流,再把流放到容器中,就是我们常见的电影了。一部电影中至少包含两种流:h.264的视频流,AAC的音频流。 容器(Container):就是一种文件格式,如:flv、...

2019-04-18 11:22:29 315

原创 ffmpeg搭建环境及模块计算机类型“x64”与目标计算机类型“X86”冲突解决方案

ffmpeg搭建环境:在程序开发中,很多时候需要用到别人开发的工具包,如OpenCV和itk。一般而言,在vs中,很少使用源文件,大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll)。如果要使用这些类,需要在文件中包含头文件的名字,如#include “cv.h”。但这个并不够,因为这个文件一般来说不在当前目录下,解决方法如下添加头文件所在的目录依次打开“项目—...

2019-04-17 13:41:41 3061 1

原创 Android 添加javah、ndk-build工具

javah工具:Program:$JDKPath$\bin\javah.exeParameters:-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$Working directory:$ModuleFileDir$\src\main\Java注释:-classpath classes 指明类所在的...

2019-04-11 16:06:03 203

原创 C语言——指针

指针:指针本身是一个变量,他存储的是数据在内存中的地址指针变量:保存内存单元地址,可以运用指针运算符*访问内存“*”的三种用法: 1. 3 * 5 :乘法 2. int *p :定义指针变量,*区分变量类型 3. *p = i :*取对象运算符指针的指向:如果一个指针变量保存了一个对应类型变量的首地址,指针变量指向这个变量,可以运用指针运算符*访问指向变量...

2019-04-11 16:01:03 126

原创 python——字典

字典(dictionary):是除列表以外python中最灵活的数据类型 字典同样可以用来存储多个数据 和列表的区别: 列表是有序的对象集合 字典是无序的对象集合 字典用{}定义 字典用key、value存储数据,之间用“,”分隔 key是索引 value是数据 key和value之间用:分隔 ...

2019-03-16 18:54:53 103

原创 python——元组

元组(Tuple):与列表类似,不同之处在于元组的元素不能修改 不同元素组成的序列 用于存储一串信息,数据之间用“,”分隔 元组用()定义,元组只包含了一个元素时,需要在元素后加一个逗号应用场景:函数的参数和返回值,一个函数可以接受任意多个参数,或者一次返回多个数据格式字符串,格式化字符串后面的()本质上就是一个元组让列表不可以被修改,以保证数据安全...

2019-03-16 18:35:13 91

原创 Android自定义控件

如何编写自定义控件1.直接继承自View2.继承自已有的View3.由不同的View组合成的ViewGroup衍生而来4.给已有的控件增加属性或者修改已有的显示方式 自定义View大概的步骤:1.自定义View的属性2.在View的构造方法中获取我们自定义的属性3.重写onMesure方法4.重写onDraw方法5.onTouchEvent6.onI...

2018-11-25 22:21:44 79

转载 Android Retrofit+Rxjava+MVP三大框架集成

Retrofit的详解 主要参考于 Retrofit2.0使用详解 retrofit是基于okhttp的封装工具类,功能十分丰富.我能力还是有限,在这里先说下它的使用吧! 简单使用 添加Gradle依赖项 compile 'com.squareup.retrofit2:retrofit:2.1.0' 创建Api接口 作为一个get...

2018-10-08 22:30:09 817

原创 Android—设置沉浸式状态栏

一、设置style文件values-v21/style.xml(这个是21版本的时候使用的主题)&lt;style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar"&gt; &lt;item name="android:windowTranslucentStatus"&gt;fals...

2018-10-04 18:02:31 1161

原创 Android—检测权限并申请

private Button btn_enter; private final static int REQUEST_CODE_STORAGE = 1; private SharedPreferences sp; private String[] PERMISSIONS_STORAGE = { Manifest.permission.WRITE_...

2018-10-04 16:07:35 1795

转载 Retrofit2.0使用姊妹篇——带进度下载文件

Retrofit是目前最主流的网络框架了,它对网络请求几近完美的封装,大大降低了我们开发者的研发难度,缩短了研发周期。最近项目中遇到了下载视频和图片文件的需求(还有上传视频和图片的需求,请移步这篇博客),我第一反应是用retrofit做呀,so easy!产品接着说,要带下载进度条哦!我一想,retrofit好像并没有给我们提供显示下载进度的接口,哎呀,看来还是得自己个儿整整喽!接下来,我把自己实...

2018-09-29 14:19:18 2374

原创 RxJava操作符的使用

1.Create: private void create(){ //create 创建Observable //Observable 被观察者 //Subscribers观察者 Observable&lt;String&gt; observable = Observable.create(new Observable.On...

2018-09-25 11:22:17 252

转载 Android——TabLayout简单使用

implementation 'com.android.support:design:26.1.0'一、首先实现布局文件&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app...

2018-08-27 15:43:33 378

原创 Android——RxJava2

Rx:Rx是一个函数库,让开发者可以利用可观察序列和LING风格查询操作符来编写异步和基于时间的程序简单点说是这样的:Rx是微软.NET的一个响应式扩展。Rx借助可观测的序列提供一种简单的方式来创建异步的,基于事件驱动的程序不准确地说,Rx就是一种响应式编程,来创建基于事件的异步程序RxJava:一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库异步,它...

2018-08-22 16:04:01 228

原创 Android——Okhttp3入门

首先,给出OKHttp的项目地址:https://github.com/square/okhttpOkHttp是一个高效的HTTP库:1.支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求2.如果SPDY不可用,则通过连接池来减少请求延时3.无缝的支持GZIP来减少数据流量4. 缓存响应数据来减少重复的网络请求一般的get请求 一般的post请求 基于Http的文件上...

2018-08-21 16:14:43 481

原创 Android ——Dagger2入门

Dagger:Dagger是Java和Android的编译时依赖注入框架。依赖注入:依赖注入是面向对象编程的一种设计模式,其目的是为了降低程序耦合,这个耦合就是类之间的依赖引起的.举个栗子: public class ClassA{ private ClassB b public ClassA(ClassB b){ this.b ...

2018-08-20 22:25:43 130

原创 Android——Retorfit2之GET请求介绍

@Path 使用。使用GET请求,接口请求全路径是“http://localhost:8080/mServer/getStudent/1”,下面是具体实现代码public interface ApiService { @GET("getStudent/{id}")//这里的{id} 表示是一个变量 Call&lt;ResponseBody&gt; getStudents(@P...

2018-08-20 16:03:43 589

原创 Android——Retrofit2

Retrofit2是一种为Android和Java提供安全的HTTP客户端,即是一种http客户端框架。可以访问网络请求并将访问的数据转换成你想要的类型。相关api:http://square.github.io/retrofit/1.Retrofit2入门首先在gradle中添加retrofit库和网络权限  1. 定义接口。  使用Retrofit ,首先需要将你的HTTP...

2018-08-20 15:39:23 476

原创 Android——AsyncTask

一.什么是AsyncTask? Android中,如果想要在子线程里进行UI操作,就需要借助异步消息处理机制,在Android中实现异步任务机制有两种方式,Handler和AsyncTask。Handler在上一篇文章已简单讲述,这里讲述AsyncTask的使用。AsyncTask相对于Handle,代码较为简单,使用更便捷,也可以准确控制子线程。AsyncTask使用步骤: ...

2018-08-20 12:14:17 126

原创 Android通信——AIDL

AIDL:AIDL是android提供的进程之间通信的机制。我们可以利用AIDL定义客户端与服务使用进程间通信都认可的编程接口。在android里,一个进程通常无法访问另一个进程的内存。尽管如此,进程需要将其对象分解成操作系统能够识别的原语,并将对象组成跨越边界的对象。编写执行这一编组操作的代码是一项繁琐的工作,因此 Android 会使用 AIDL 来处理。通过这种机制,我们只需...

2018-08-08 17:30:19 97

原创 Android四大组件——Service

Service有startService,bindservice(两个基础用法。通过log查看生命周期)messenger和aidl(Android IPC机制主要也是通过service与binder来实现的) 编写activityInfo类来管理这四个测试的activity类,方便activity之间的跳转,简化代码package com.example.servicetest;pu...

2018-08-07 19:13:27 164

原创 Android面试(三)

一.线程的并行和并发有什么区别并发:指应用能够交替执行不同的任务并行:指应用能够同时执行不同的任务两者区别:一个是交替执行,一个是同时执行.二.编程:工厂模式或冒泡排序三.singleTask和singleTop的区别四.DBHelper和Content Provider各在什么情况下使用五.LinkedList和ArrayList的底层是什么数据机构,以及区别六.jvm有几个模块七.Socket...

2018-07-12 10:49:09 226

原创 Android面试(二)

一.简述面向对象编程语言的基本特征抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法封装: 封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面多态性: 多态性是指允许不同类的对象对同一消息作出响应。比如同样...

2018-07-10 20:51:33 170

原创 小白Android面试之旅

一.AsyncTask异步处理的原理二.Android是如何访问网络的三.RecyclerView是如何实现上拉加载和下拉刷新的四.回调函数五.重写和重载的区别六.静态内部类和局部内部类的定义和区别七.Fragment和Activity之间是如何传输数据的八.简述ContentProvider及其作用九.Android中动画类型以及区别十.java中向上转型和向下转型子类引用的对象转换为父类类型称...

2018-07-10 11:05:01 165

转载 recyclerView加载两个布局

一、想要实现加载两套不同的布局,只需在getItemViewType方法中返回不同的type,就可以在onCreateViewHolder方法中根据不同的type加载不同的布局,不同的布局,也同时也要实现不同的ViewHolder。onBindViewHolder方法也就可以根据不同的个布局进行不同的操作/** * 适配器 */ class MyAdapter exte...

2018-04-29 10:13:26 2349

转载 listView.addHeader

一、 概述:在代码中使用 listView.addHeaderView(…) 方法可以在ListView组件上方添加上其他组件,并且连结在一起像是一个新组件。如果多次使用 .addHeaderView(…) ,则最先添加的组件在最上方,按添加的先后顺序由上到下罗列。 此时listView 的 position = 0 的位置对应的是view1,而不再是原来listView中的第一条了。如下图所示:...

2018-04-29 10:12:41 1683

Android 京东商城

Android开发京东app商城类,可以参考使用,老少皆宜,毕设推荐

2018-04-21

Android 商品加减控件

我们都知道,购物车是做商城项目必不可少的一个环节,购物车中的加减控件就是商城中的重中之重,最近项目中也用到了加减控件,但是使用起来样式不能随便更改,决定简单封装一下,以后用到的时候就不那么麻烦了,几行代码就搞定。

2018-04-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除