自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 从Cronet 看Http3和QUIC(一)

前言前一段时间,在公司内部进行了一次QUIC协议的演讲。当时因为时间有限,没有仔细的讨论Cronet 的源码细节,仅仅只是介绍了QUIC的协议细节。本文就从Cronet源码出发,聊聊QUIC的一些实现,进而看看QUIC对比Http2的优势,解决了什么问题?网上搜了不少QUIC解析文章,不是太老就是粗略聊聊原理,没有几个真的深入源码层面来证明说法是否正确,本文将主要根据QUIC最新的源码来聊聊整个协议的设计,以及这样做的优势正文Http 发展史在聊QUIC之前,我们需要对QUIC有一个初步的了解。Q

2022-05-03 15:27:21 2204

原创 Android 重学系列 View的绘制流程 (一)View的初始化

前言View的绘制流程这一篇文章其实十分不好写,因为在网上已经有千篇一律的文章,导致我一直不太想写这一篇文章。不过既然是Android重学系列,还是一步一脚印来分析分析里面的细节。如果对这个流程很熟悉的人来说,本文就没必要阅读了。如果不是很熟悉的朋友可以阅读本文,看看系统上设计的优点以及可以优化的地方。正文在整个View的绘制流程中,从大的方向看来,大致上分为两部分:在Activity的...

2019-09-22 17:25:12 918

原创 Skia的初探(Skia的GN脚本编译与第一个Skia应用)

前言如今大前端代表之一flutter十分火热,也是一种大的趋势。flutter与rn对大前端上的理解不同,rn是自上而下的大前端解决方案,而flutter是自下而上的大前端解决方案。为什么我说flutter是自下而上的解决方案呢?实际上这种解决思路也来源与移动端手机开发,flutter绕开对每一个系统顶层ui api,直接对接系统底层的cpu,gpu。Google是怎么做到的?实际上,如果翻开...

2019-09-15 17:39:00 4389 1

原创 OpenGL(四)坐标系

前言在前两章,总结有顶点坐标,纹理坐标。实际上在这之上还有更多的坐标。作者经过学习后,在本文总结一番。上一篇:OpenGL矩阵正文OpenGL希望每一次运行顶点着色器之后,我们所见到的顶点坐标都转化为标准化设备坐标(NDC)。也就是说,每个顶点的x,y,z都应该在[-1,1]之间,超出这个范围都应该看不见。我们通常会自己设定一个坐标范围,之后顶点着色器中所有的坐标都会转化为标准化设备坐标...

2019-09-07 18:00:01 430

原创 Android 重学系列 WMS在Activity启动中的职责 计算窗体的大小(四)

前言通过启动窗口为例子,大致上明白了WMS是如何添加,更新,移除窗口的工作原理。本文将会重点聊一聊窗口的大小计算逻辑。下面的源码都是来自Android 9.0正文窗口大小计算计算窗口的大小和Android 4.4相比变化很大。花了一点心思去重新学习了。在Android 4.4中,窗体的计算在onResume中调用了ViewRootImpl调用relayoutWindow对整个Window...

2019-09-07 17:56:12 1882

原创 Android 重学系列 WMS在Activity启动中的职责 添加窗体(三)

前言经过上一篇章的讨论,我们理清楚了ActivityRecord,TaskRecord和窗体容器之间的关系。同时达到了应用启动时,启动的第一个启动窗口,StartingWindow。这个时候,我们可以看到一个直指核心的代码段: wm = (WindowManager) context.getSystemService(WINDOW_SERVICE); ...

2019-09-07 17:51:21 566

原创 Android重学系列 红黑树

背景红黑树,是一个比较复杂的数据结构。让我们分析一下,整个AVL树的性质。AVL最明显的特点就是,每个节点左右子树的高度差不超过1。那么就会势必产生这样的性质:当插入一个新的节点的时候时间复杂度是O(LogN)还有没有办法更快的?因此红黑树诞生了。正文先介绍一下红黑树的概念:这是一种特殊的二叉搜索树。这种二叉搜索树将会符合如下5条性质:1.每个节点都是黑色或者红色的。2.根节点是黑色...

2019-04-13 19:51:03 929

原创 Android重学系列 AVL树

背景接着上面那个二叉搜索树来讲。有思考过二叉搜索树最差的搜索时间复杂度吗?最差的时候,二叉搜索树插入的数据刚好是一条直线,这样时间复杂度就蜕变和链表没什么区别(就是从O(logN)蜕变到O(n)级别)。因此AVL树因此诞生了。如下图所示:正文AVL树有什么概念呢?在二叉搜索树之上,我们为了保证整个树都有左右节点,尽量做到每个大小的节点都均匀分布,也就在二叉搜索上添加一个约束:每个结点...

2019-04-13 19:49:40 233

原创 Android重学系列 二叉搜索树

背景Binder这一块涉及的比较广,囫囵吞枣的讲,结果只会把字数堆上多高我不清楚。清楚的是,这样阅读起来吃力。而Binder涉及的知识面比较广,在Binder驱动下层使用到了红黑树,因此我将提前讲红黑树算法(相当于知识点捡漏吧)。本来这个算法专题,我准备是说完四大组件的源码原理之后,开启的一个新的专栏。为了说清楚这个Binder,我提前梳理一遍我所理解的红黑树。但是思考了半天,感觉如果连二叉搜索...

2019-04-13 19:47:34 442

原创 Android重学系列 SystemServer到Home的启动

背景很多老哥看了上一篇的博文有点云里雾里,没关系,这些东西贵在坚持,不懂多查查,自然就懂了。毕竟也不是什么高深的数学推导。之前已经写了Zygote进程的系统启动。等待着新的应用程序,通过socket通知Zygote孵化进程。接下来我的源码会从Android 9.0 (Android P)开始分析。由于上一篇的,native源码没有太大的变化,就从我最熟悉的Android 7.0讲起来。接下来来...

2019-03-05 23:20:06 565

原创 Android 重学系列--系统启动到Activity

背景为什么要写这个,是因为做android到今天,发现自己的基础不牢固,很多东西早年明白是怎么回事,下意识的知道怎么做,android这一块做久了过多的思考业务与设计,反而原理开始模模糊糊了。但是探究其原因,是过久没接触,成为了下意识行为。这是个不好的信号,也是一个不好的开始。最近又听闻在tx的哥们,以及面试大厂成功的哥们,一问起他们的面试题,以及工作情况,原以为自己的水平还算过的去,发现自己在...

2019-02-25 16:11:41 584

原创 横向浅析Small,RePlugin两个插件化框架

如果,读这篇文章发现错误或者疑惑的欢迎在这里讨论,这里也是我的csdn博客:https://www.jianshu.com/p/d824056f510b#目录一 背景二 个人实现思路- 1.Activity注册问题- 2.源码分析原理- 3.越过Android系统检测AndroidManifest第一步- 4.越过检测,查找对应的类- 5.解决跨插件导致资源找不到或者资源冲突问...

2019-02-22 23:53:29 511

原创 关于Android4.0 BLE编程的一点总结(搜索篇)

从公司里面接过BLE蓝牙项目已经有一段时间了,虽然这个项目的复杂度不高,但是对于我这种第一次开发蓝牙的来说,发现里面有不少的坑,特此在这里进行记录,本来一直想总结的,但是手头上的东西太多了,就留到节假日了。安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备、查询服务和读写特性。相比传统的蓝牙,BLE更显著的特点是低功耗。这一优点使Android App可以与

2017-01-01 19:47:25 3099 2

原创 盗号者你好,我有一些事情不得不可你说

这一段时间,一直在在我的博客中灌水,一直放上下厨房的地址,我只在在线,一分钟前刷新又发现你在灌水,垃圾链接。这个博客本来是想用心做的,你这么做就不怕遭报应吗?虽然在你的眼里只是可以戏耍的事情,不过

2016-09-20 18:00:07 512

原创 关于activity启动流程的一点愚见

前言Activity在android开发中作为显示的组件,它在整个Acndroid开发中占有着重要的地位。已经开发了Android一段时间的我对Activity七大生命周期以及如何启动产生了兴趣。然而,我的水平不高,为此我补了不少的知识,也花了不少的时间,为研读Activity启动的做准备。在上一篇关于Window创建的源码阅读中,画下自己对Activity启动的理解图: 在这个Activit

2016-09-16 18:01:04 2342

原创 关于Window创建流程的一点愚见(Activity启动过程中)

在介绍Window在Activity启动中的创建流程时,我先简单的说明一下Activity的启动流程,Activity的启动是通过函数startActivity(Intent intent)启动的。如果简单的归纳成一张示意图: Activity启动流程至onCreate为止这样我们就可以很清晰的明白了Activity在OnCreate()启动之前的流程。从上面的示意图我们可以清晰的知道整个流程最终

2016-09-10 17:43:24 1272 1

原创 关于Window和WindowManager的一点愚见(添加,删除,更新)

正文先看看自己要编写一个WindowManager该如何实现。 先看看MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.a

2016-09-10 08:29:58 3561

原创 关于RemoteView的一点愚见(RemoteView在AppWidget中的工作流程)

之前复习了实现桌面小部件的时候,知道了其中运用到了RemoteView这个特殊的类。这个类,顾名思义就是远程视图。可以跨越进程的显示View。这也就诞生了一些特殊应用,比如说,我们完成远程的显示视图。之前复习的AIDL也可以办到这一点,但是相比于直接使用RemoteView来说的确是复杂了那么一点。不过RemoteView的缺点也是很明显的,为了提高RemoteView的进程间通讯的速度,RemoteView只

2016-09-05 20:34:35 4515

原创 关于RemoteView的一点愚见(实现桌面小部件)

RemoteView中的应用除了有通知栏的自定义,当还有桌面小部件也是通过RemoteView来完成的。

2016-09-02 14:21:07 1216

原创 关于Notification的一点愚见(PendingIntent工作流程)

PendingIntent,顾名思义,延迟的Intent。那么肯定会产生一个疑问,那就是PendingIntent究竟和Intent的区别在哪里呢? 其实PendingIntent其实就是对Intent的一个封装,不过Intent是立即触发效果,就像我们常用的这样: Intent intent = new Intent(MainActivity.this,DemoActivity1.

2016-09-01 21:18:41 2389

原创 关于Notification通知的一点愚见(自定义通知栏)

今天在复习Notification通知栏的时候,好奇翻了一下源码,终于弄懂了PendingIntent在Notification中的机制以及工作流程,这对我研究Activity的启动流程有了一定的帮助。通知的实现我们复习一下常规的通知栏是怎么样实现的: //声明一个新的Notification,在里面设置参数 Notification notification = new N

2016-09-01 16:19:51 887

原创 关于Android动画的一点愚见

这一段时间在看Activity的工作流程,奈何内容太多,涉及到的东西有点多,暂时放下这一篇,慢慢来。先总结一下自己学过的Android自定义动画与属性动画。Android的View动画分为两类变换动画(Tweened Animation)以及帧动画(Frame by-frame Animation)。变换动画又分为四大类:平移(translate),旋转(rotate),缩放(scale),透明度(

2016-08-31 20:38:30 748 1

原创 关于Activity的一点愚见

这一段时,准备研究一下四大组件中Activity的启动过程。在此之前,让我自己总结一下Activity里面一些基础的知识点。Activity 的生命周期Activitty有七大生命周期,也是有七个函数标识着这个七个生命周期。下面就用最常见的图来显示整个路程: 从上图可以清晰的知道: Activity的七大生命周期分别为:1.onCreate():这个方法是指Activity被创建,在这个方法中将

2016-08-29 14:02:08 654

原创 关于BinderPool Binder连接池的愚见

在写BinderPool之前还记得,AIDL中也可以接受AIDL对象的吧。其实设计者应该也是为此而考虑的。 面对着许多的AIDL需要去完成远程通信,难道我们每一个去实现,每一个去调用吗?不不不,这样代码写起来不简洁。所以,我们的策略就是通过自己写一个AIDL文件去管理众多AIDL文件。再用Service去管理这个管理AIDL实现的BinderPool。 这就是BinderPool连接池的思想。这

2016-08-28 20:40:46 1677 5

原创 关于Scoket的一些愚见

这是接着上一章,关于Socket以及输入输出流的知识点。Socket在Java网络编程中十分常见,而在Android则是使用封装好的HttpClient和HttpURLConnection。 不过,随着版本的推移,HttpClient逐渐被费用,而HttpURLConnection逐渐的完善。不过这些都是题外话,我现在要总结的东西是Socket,相比上面两者Socket我用到的机会不多,现在慢慢的

2016-08-27 17:14:54 949

原创 关于IPC的一点愚见

IPC是Inter-Process-Communication的简写,就是指进程间通讯。Linux的进程间通讯,不必多说,就是指管道,信号和跟踪,信号量,套字节,共享内存等。在这里主要讨论的是Android开发中常用的IPC方案。目前为止,我们常用的IPC方案有以下几种: 1.使用Bundle 2.使用文件共享 3.使用Messenger(信使) 4.AIDL 5.ContentProvi

2016-08-27 15:52:12 923 1

原创 关于Binder在Java上工作的一点愚见(二)

上一篇,大致讲述了Binder在Java上的工作原理。总结一句话就是将数据序列化为Parcelable后,通过onTransact与transact的方法传到Native层进行处理。这一篇,就让我们自己写一个Binder出来。回忆一下,首先我们需要一个接口继承了IInterface,里面声明了将要通信的方法,以及作为识别方法的标志位。文件 IBookManager.javapublic interf

2016-08-26 13:49:29 610

原创 关于Binder在Java上工作的一点愚见(一)

Binder作为android作为IPC(进程间通信)的核心,在整个android框架中复用了很多遍几乎只要关于进程之间通信都要涉及Binder,可以说到处都有Binder影子,所以说对android下面感兴趣,Binder就是必备的前置工具。Binder是什么呢? 首先我们要知道在Linux中进程通信的方法有一下几种:管道(Pipe),信号与跟踪(Signal and Trace),插口(soc

2016-08-26 11:59:52 839

原创 关于AsyncTask的一点愚见

在Android开发中,为了避免出现ANR现象,主要是指来自于接触事件响应事件过长来说,我们开发者通常会将耗时长的操作,如网络操作,大图片加载,IO操作等等会放在子线程中去处理。而Android中线程除了来自于Java的Thread,Executor生成器之外,还有已经封装好的AsyncTask,IntentService,HandlerThread。而本文就开始从AsyncTask开始说起自己的感

2016-08-23 21:26:00 1549

原创 关于Handler消息机制一点愚见与总结

Handler消息机制在android刷新UI中是经常使用到的一个工具,但是Handler并不是专门用于刷新UI,是为了让任务能够轻易的切换到Handler中操作。出现的缘由,主要是因为android中的UI组件为了追求效率,而放弃了对UI组件在并发情况下加锁情况的解决。而是规定了子线程无法访问UI控件。这个时候,修改主线程的UI该怎么解决呢?这时就需要Handler的消息机制,来完成对UI操作切换

2016-08-20 16:18:17 907

原创 如何用按钮控制循环HorizontalScrollView水平滑动

如何用按钮控制循环HorizontalScrollView水平滑动最近做了一个用按钮控制循环滚轴水平滑动的控件,在这里总结一下。要控制滑动那么先要实现一个能够循环滚动的滚轴,以下是我的思路: 首先实现这个需求我想到的方案有两个:第一:做一个适配器,这个适配器的主要方法是通过获取存入图片的list的长度,接着通过除余的方法循环的返回相应位置的View再添加上去。 缺点:当图片的多的时候,并且没有通

2016-08-14 10:42:49 2973

原创 Qt数据库处理时候注意的小结1

问题: 数据库无法多次插入是怎么回事? 经过一个下午的实验之后,明白了一件十分重要的事情。数据库的建立以及绑定已经完成并且绑定好了,为什么自己的数据根本没有办法正常的插入进去了呢? 代码:MainWindow::MainWindow(QGraphicsView *parent) : QGraphicsView(parent){ tablemodel = new QSqlTab

2016-01-19 18:44:36 584

原创 Android学习小结3(活动)

所有的知识都是《第一行代码》里面的 一个活动的四种状态: 运行,暂停,停止,销毁一个活动的生存期: onCreate(),onStart(),onResume(),onPause(),onStop(),on Destory(),onRestart(); 完整的生存期: onCreate()到onDestory() 可见的生存期: onStart()到onStop() 前台的生存期

2016-01-18 22:29:11 345

原创 Android学习小结2

想要调用一个活动有三样东西绝对不能少: 在AndroidMainifest中注册 在布局中,布置好id,以及其他属性 在.java中写下 Intent intent = new intent(“在注册好的action的名称”/intent.XX); 可以加上addcategory,控制多个目录 startActivity()来启动intent隐式启动Activity的intent到底发给

2016-01-18 22:25:52 346

原创 android 学习入门小结1

目录: Src:放置所有Java语言 Gen:自动生成,有R.java记录每一个资源id Asset:存放一些随着程序打包的文件 Bin:包含编译时自动产生的文件。会有编译好的安装包 Libs:第三方Jar包 Res:所有用到的资源将会在里面 AndriodMainifest.xml:andriod文件的配置文件,四大组件在这里注册。还给程序添加权限,重新制定版本 Project.p

2016-01-18 22:22:32 382

原创 关于Qt信号与槽的小结

制作电子相册的时候,遇到了QMainWindow要添加控件的时候,要加上setCentralWidget() 还有要弄明白GraphicsView框架 一般来说,view是显示,QGraphicsScene则是为了控制里面的Item和widget 在Scene上添加的widget和item都会返回到相应的QGraphicsProxyWidget以及GraphicsItem在做自动播放时,遇到了

2016-01-17 22:34:28 650

原创 关于Qt 图片资源的嵌入

本人还在学习中,如果出现了什么问题,还请原谅。据我所知,一共有两种方法将图片资源嵌入第一种是绝对路径的嵌入。 这里要注意的是格式: 比如说: 在pixmap里面加入图片MainWindow::MainWindow(){ widget = new QWidget(this); setCentralWidget(widget); QLabel *view = new QLa

2016-01-05 15:25:15 531

原创 C语言记忆强化1

语言精髓:指针,数组,结构体,其他语言所没有的底层驱动管理 那么计划章节:10章 指针与数组 12章存储类,链接,内存管理 13章文件输入输出 14章结构和其他数据表示 15章 位操作 16章C预处理10章指针与数组 数组是由一系列类型相同的元素组成 假如用的是ANSI之前的编译器,初始化数组的时候需要加上static 设定只读数组的时候最好加上const 数组可以被定义为多组存储

2016-01-05 14:31:57 463

原创 C++补全计划1

c++补全计划

2016-01-05 14:20:02 479

原创 Qt 制作电子表格时候应该注意的地方

本人是根据Qt4.GUI 那本书里面学习的,有部分内容时书里面转载出来的,大部分原创这里是制作电子表格时候所经过的路程,当时只是初学,笔记有部分没有这么深度,只是对书里面一些代码写了个人理解总结:看了一段日子之后,结合自己学过的.NET,C#,CSS,在VS上开发的经历,发现这些之间都是极其的相似,只是这里面多了信号和槽用来联系所有的动作,真的十分有Linux的风格。第一章:关

2016-01-05 14:08:48 1465

linux的课件

这是linux的课件,经过精选后,留下来的讲义。有意向的可以下载看看。

2015-09-08

空空如也

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

TA关注的人

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