自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 Android深度性能优化-更底层、全局、多维度优化

底层、全局、安全的安卓性能优化方式

2022-08-11 15:24:27 1265 1

原创 React Native性能优化总结

React Native开源已经接近2年时间,京东、携程、58同城等互联网公司都在使用,公司于今年也开始使用,并推广到各个新项目。本文重点分享我们遇到的一些问题以及优化方案。一、为什么会引入React Native?1. APP大小占用公司数字钱包项目,随着各项业务功能的全面移动化,随着多币种的不断支持,App功能越来越多,越来越臃肿,Size达到将近30MB,而同样功能,使用RN开发...

2018-12-23 15:16:29 1302

转载 Android 侧滑菜单

效果图思考可以看出滑动的是两个layout,所以自定义的侧滑控件应该继承ViewGroup,实现onMessure()和onLayout()方法,为了简化操作,可以继承android系统已经实现好的ViewGroup的子类 —— FrameLayout,这样就不用自己去测量了。onLayout()方法中,初始化的时候,要将侧边菜单的布局放到屏幕左边看不到的地方。menuVi

2015-11-16 16:16:20 431

原创 xmpp学习

一、定义       XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。       XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网

2015-11-12 17:13:28 450

原创 xmpp

设计基于开源的XMPP即时通信协议,采用C/S体系结构,通过GPRS无线网络用TCP协议连接到服务器,以架设开源的Openfn'e服务器作为即时通讯平台。         系统主要由以下部分组成:一是服务器,负责管理发出的连接或者与其他实体的会话,接收或转发XML(ExtensibleMarkup Language)流元素给授权的客户端、服务器等;二是客户终端。它与服务器相连,通过XMPP获得

2015-11-12 17:02:47 399

原创 解析Lua中关于Metatable学习笔记

Lua中关于Metatable学习笔记是本文要介绍的内容,先来了解一下什么是Metatable,中Metatable这个概念, 国内将他翻译为元表. 元表为重定义Lua中任意一个对象(值)的默认行为提供了一种公开入口. 如同许多OO语言的操作符重载或方法重载. Metatable能够为我们带来非常灵活的编程方式.具体的说, Lua中每种类型的值都有都有他的默认操作方式, 如, 数字可以

2015-11-12 16:05:50 458

原创 Java类加载

JVM和类      当我们调用Java命令运行某个Java程序时,该命令将会启动一条Java虚拟机进程,不管该Java程序有多么复杂,该程序启动了多少个线程,它们都处于该Java虚拟机进程里。正如前面介绍的,同一个JVM的所有线程、所有变量都处于同一个进程里,它们都使用该JVM进程的内存区。当系统出现以下几种情况时,JVM进程将被终止:1、程序运行到最后正常结束。2、程序运行

2015-10-21 14:13:08 393

转载 Android TouchEvent事件传递机制

跟touch事件相关的3个方法:public boolean dispatchTouchEvent(MotionEvent ev);    //用来分派eventpublic boolean onInterceptTouchEvent(MotionEvent ev); //用来拦截eventpublic boolean onTouchEvent(MotionEvent ev);  

2015-10-09 16:27:28 406

原创 LibRTMP源代码分析3

AMF协议是Action Message Format协议的简称,AMF协议是Adobe公司的协议,主要用于数据交互和远程过程调用,在功能上与WebService相当,但AMF与WebService中的xml不同在于AMF是二进制数据,而xml是文本数据,AMF的传输效率比xml高。AMF使用http方式传输,目前主要用于ActionScript中,实现Flex与Service之间的通信。AMF目

2015-09-21 18:07:27 417

原创 LibRTMP源代码分析10:处理消息

函数RTMP_ClientPacket()是libRTMP中最重要的核心函数之一,主要完成各种消息的处理。/** * @brief 根据接收到的消息类型的不同,作出不同的处理。 *  消息类型有协议控制消息、Flv数据、Flex消息等。 *  协议控制消息的定义可参考官方协议:RTMP消息格式(第5章) * * @return 如果含有多媒体(音

2015-09-21 15:33:42 535

原创 LibRTMP源代码分析9:接收消息

在这里在研究接收消息(Message)的源代码,接收消息最典型的应用就是接收视音频数据了,因为视频和音频分别都属于RTMP协议规范中的一种消息。在这里主要分析接收视音频数据。LibRTMP中完成视音频数据的接收的函数是:RTMP_Read()。// Flv文件头static const char flvHeader[] = { 'F', 'L', 'V', 0x01,   0x00

2015-09-21 15:28:32 550

原创 LibRTMP源代码分析8:发送消息

在详细分析函数RTMP_SendPacket()之前,让我们来看看RTMPPacket结构体的定义:typedef struct RTMPPacket{        uint8_t   m_headerType;// ChunkMsgHeader类型(4种)        uint8_t   m_packetType;// Message type ID(1-

2015-09-21 15:25:37 508

原创 LibRTMP源代码分析6

前面介绍了建立网络连接(NetConnection)和建立网络流(NetStream),这些命令数据是怎么发送出去的呢?在底层是怎么实现的呢?接下来就要详细分析各种消息的发送过程。 首先大致列举一下消息命令:发送connect命令          : SendConnectPacket()发送createStream命令  : RTMP_SendCreateStream(

2015-09-21 15:22:20 885

原创 LibRTMP源代码分析6:建立网络流

建立了RTMP网络连接之后,客户端发送createStream 命令到服务器端为消息连接创建一个逻辑通道。 NetStream 定义了这个传输逻辑通道,通过这个通道,音频流、视频流以及数据消息流可以通过连接客户端和服务端的 NetConnection 传输。NetConnection是默认的通信通道,流ID为 0。RTMP_SendCreateStream( )函数用来发送create

2015-09-21 15:06:41 562

原创 LibRTMP源代码分析5:建立网络连接

服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示: 网络连接的基本步骤在第一篇文章中有所介绍,此处不再重复。源代码中的 RTMP_Connect(...) 用于建立RTMP网络连接。/** * @brief 建立RTMP中的网络连接(NetConnection). *  a) 创建并

2015-09-21 14:15:32 992

原创 LibRTMP源代码分析2

获取RTMP流媒体数据很重要的前提是RTMP的URL的解析,首先回顾一下RTMP的URL的格式:         url = “rtmp://pub1.guoshi.com:1935/pushstation/ 291?wsSecret=2b8 &wsTime=5302         协议名 :RTMP_PROTOCOL_RTMP = 0;         主机名 :"pu

2015-09-21 13:17:02 502

原创 LibRTMP源代码分析4

在RTMP客户端和服务器端网络层连接成功之后,第一件事情就是RTMP的握手。至于为什么要握手,协议本身没有太多的描述,我理解的握手目的:握手的主要目的就是让客户端和服务器端互相打个招呼,其主要内容应该包括看看两者是否同时理解RTMP协议本身(至少理解握手啊,呵呵)以及对RTMP协议版本的互认;至于是否理解RTMP协议本身的解决方案就是制造一些RTMP特有的数据和要求在客户端和服务器端来回折腾几次,

2015-09-21 13:14:33 387

原创 LibRTMP源代码分析1

1. 背景知识   RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。RTMP协议广泛用于直播、点播、聊天等应用,以及pc、移动、嵌入式等平台,是做流媒体开发经常会接触到的协议。想要了解RTMP,需要首先了解Flash流媒体系统。最简单的Flash流媒体系

2015-09-21 11:47:29 656

原创 android端读取本地图片出现OutOfMemoryException

前些日子一直为图片内存溢出问题困扰着,查了N多资料,将google彻底翻遍了都没找到解决方案,就当我几乎绝望的时候意外发现了一位网友的一个工具类,抱着最后一丝希望将代码co过来试了一把,结果令我喜出望外。嘿,解决了!暂不说多么欢喜了,听我慢慢道来这其中的前因后果吧!   需求:下载时候将图片一并down下来,在空间里显示并支持离线观看   第一个版本代码:    /

2015-09-17 07:48:01 386

转载 android抓包工具fiddler使用介绍 抓取 手机APP 中资源。

正题:这里介绍 抓包的关键,Fiddler  ,Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。    我们就是用这款软件抓取 ,我们手机app 访问的 资源路径 的。    下面 我们拿实例 来演示下,怎么用fiddler 抓取数据。(以某拍为例吧)。     环境: win7 和 G620S-UL00(华

2015-09-11 17:03:34 1195

转载 ThreadLocal的工作原理

Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。MessageQueue的中文翻译是消息队列,顾名思义它的内部存储了一组消息,其以队列的形式对外提供插入和删除的工作,虽然叫做消息队列,但是它的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表。Looper的中文翻译为循环,在这里可以理解为消息循

2015-09-11 13:58:34 455

转载 日期滚动栏的实现

在淘宝电影上面有这样一个功能,日期可以滑动,并且选中的是在正中间,效果如下: 看完了,那么问题来了。这个功能怎么实现呢?我们先来分析一下: 把功能拆分一下来看,如果不能滚动,是不是很好实现?其实就是一个 tab 栏,我在前面的 blog 中Android 快速实现 ViewPager 滑动页卡切换(可用作整个 app上导航) 中就实现了此功能,然后在此功能的基础上加上滚动功

2015-09-10 16:30:03 907

转载 Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

Android中触摸事件传递过程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法。这个是困扰初学者的问题之一,我开始也是。这里记录一下dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()的处理过程,以供记忆。    dispat

2015-09-07 17:59:53 502

原创 onMeasure流程,MeasureSpec详解

在自定义view的时候,其实很简单,只需要知道3步骤:1.测量——onMeasure():决定View的大小2.布局——onLayout():决定View在ViewGroup中的位置3.绘制——onDraw():如何绘制这个View。而第3步的onDraw系统已经封装的很好了,基本不用我们来操心,只需要专注到 1,2两个步骤就中好了。而这篇文

2015-09-06 17:17:20 550

转载 Java类的多态机制

Java中将一个方法调用同一个方法主体关联起来被称作绑定。绑定分为前期绑定和后期绑定。前期绑定是在编译器决定的,而后期绑定是在程序运行时决定的。Java中除了static方法和final方法(private方法也是final方法,只不过是隐式的为final)之外,其他所有的方法都是后期绑定。Java类的多态指的是当将子类向上转型为父类型并调用父类型中相应的方法时,多态机制会根据动态绑定自动判断出调

2015-09-04 17:45:37 369

转载 深入理解Java中的HashMap的实现原理

HashMap继承自抽象类AbstractMap,抽象类AbstractMap实现了Map接口。关系图如下所示:Java中的Map接口允许我们将一个对象作为key,也就是可以用一个对象作为key去查找另一个对象。在我们探讨HashMap的实现原理之前,我们先自己实现了一个SimpleMap类,该类继承自AbstractMap类。具体实现如下:

2015-09-04 16:49:58 428

原创 Android的Touch事件处理机制介绍

Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后。 Android的Touch事件处理分3个层面:Activity层,ViewGroup层,View层。 首先说一下Touch事件处理的几条基本规则。 如果在某个层级没有处理ACTION_DOWN事件,那么该层就再也收不到后续的Touch事件了直到下一次ACTION_DOWN事件。 说明: 

2015-08-05 14:18:49 370

转载 详解java类的生命周期

最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当抛砖引玉,希望对在这个问题上有疑惑的朋友有所帮助,文中有说的不对的地方,也

2015-07-28 11:35:42 266

原创 class.forName()

使用jdbc方式链接数据库时会经常看到这句代码:Class.forName(String className)。本文将浅显地解读这句代码的含义。看这篇文章之前应该对java的反射机制有所了解,至少是对Class类有一定的了解。官方文档初始化参数指定的类,并且返回此类对应的Class 对象(不了解Class类的同志,应该首先查看下java反射相关知识)。例如,以下代码片段返回 jav

2015-07-28 11:25:43 375

原创 JAVA中类、实例与Class对象

类      类是面向对象编程语言的一个重要概念,它是对一项事物的抽象概括,可以包含该事物的一些属性定义,以及操作属性的方法。面向对象编程中,我们都是以类来编码。 实例简单理解,就是new,就是对类的实例化,创建这个类对应的实际对象,类只是对事物的描述,而实例化就相当于为这个描述新开辟了一块内存,可以改变这块区域里的各种属性(成员变量),当然,也可以实例化多块区域,

2015-07-28 11:19:33 535

转载 ThreadLocal

ThreadLocal是什么     ThreadLocal这个词如果直接翻译就是“本地线程”,可是如果真的按“本地线程”来理解,那就确实大错特错了,ThreadLocal它并不是一个Thread,它跟Thread确实有关系,是用来维护Thread的有关变量的,把它命名为ThreadLocalVariable可能更容易让人理解,在多线程中ThreadLocal为变量在每个线程中都创

2015-07-27 10:10:49 319

原创 activity生命周期

Q:能说一下Activity的生命周期吗?Activity生命周期如下:onCreatonStartonResumeonPauseonStoponDestory外加一个 onRestart就像图示一样,当一个activity第一次启动时会调用的函数分别是onCreatonStartonResum

2015-07-25 22:01:14 305

转载 SingleTask SingleInstance的区别

现有2个项目,taskA、taskB。taskA负责调用taskB中指定的界面。taskB中有3个界面,a、b、c,每个界面显示它所在的task id。SingleTask:其中b界面被声明为SingleTask。先运行taskB,显示a界面,由a界面调用b界面,这时b界面的taskid与a界面的taskid是一致的,说明b界面与a界面在同一个task中;由

2015-07-25 07:44:24 526

转载 char 类型的范围是 : 128~+127

在 C 语言中, signed char 类型的范围为 -128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是 -128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1 (n为整型的内存占用位数),所以 int 类型32位那么就是 -(2^31) ~ 2^31-1 即 -214

2015-07-24 11:45:32 569

原创 Activity的启动模式

Activity的四种启动模式与Intent对象 (带FLAG_ACTIVITY_* 常量)共同决定activity组件在被调用时将要发生的动作。在android里,有4种activity的启动模式,分别为:“standard” (默认)“singleTop”“singleTask”“singleInstance” 四种模式主要可分成两组 ,"standard" 和

2015-07-23 14:24:27 308

原创 sqlit数据库升级,添加字段

数据库升级有俩个靠谱的方法,(1)db.execSQL("ALTER TABLE test ADD COLUMN age");(2) db.beginTransaction(); db.execSQL("ALTER TABLE test RENAME TO _Name"); db.execSQL("CREATE TABLE test(id integer primary key a

2015-07-16 16:45:09 728

原创 javah生成.h文件时提示“找不到类”的解决方法

Android studio生成.h提示当用javah为NdkJniUtils.clsaa文件生成.h文件的时候提示错误:错误: 找不到 'NdkJniUtils' 的类文件。解决方法:进入debug目录执行:javah -classpath . -jni dym.github.io.ndkapplication.NdkJniUtils

2015-07-05 18:11:34 528 1

转载 ndk-stack定位不出崩溃代码行的问题

2015-06-16 18:38:04 361

转载 cocos node sceen

本节的学习目标:(1)    了解结点系统,学会自行构建结点系统。(2)    了结场景,层,精灵的组织关系与各自功能2.1 结点系统原理入门2.1.1 结点启蒙:在介绍Cocos2d-x的结点系统之前,我们需要首先做一些启蒙,什么是树?定义: 一棵树(tree)是由n(n>0)个元素组成的有限集合,其中:(1)每个元素称为结点(node);

2015-06-12 16:48:52 640

转载 巧说table的几种构造方式

之前对于Lua的研究都是纸上谈兵,没有真正的项目练手,现在公司的项目基本上都是用Lua开发,是时候补充一下我那蹩脚的Lua知识了。基础数据类型、表达式、循环结构什么的我就不说了,这么简单的东西说了也要被大家喷。今天我想说说table的几种构造方式。 本文来自[笨木头与游戏开发],笨木头花心奉献,花心?不呢,是用心。转载请注明,原文地址:http://www.

2015-06-09 10:11:15 504

空空如也

空空如也

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

TA关注的人

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