- 博客(113)
- 收藏
- 关注

原创 android webview loadUrl实现原理浅析
先简单介绍一下android里面navive和js互相调用Android与JS通过WebView互相调用方法(二者沟通的桥梁是WebView),实际上是:Android去调用JS的代码JS去调用Android的代码对于Android调用JS代码的方法有2种:通过 WebView.loadUrl()通过 WebView.evaluateJavascript()对于JS调用Android代码的方法有3种:通过 WebView.addJavascriptInterface() 进行对象映
2021-01-13 15:40:54
8647
2

原创 android 屏保 (PowerManager & DreamService)
一、应用中使用DreamService1.DreamService简介 白日梦是Android设备的新型互动屏保模式。当设备置入底座或充电闲置状态时(屏幕没有关闭),此模式自动激活。白日梦模式每次显示一个,可以是纯粹的视觉效果,在用户触摸时消失,也可以是响应用户所有输入的交互式应用。您的白日梦将运行在您应用的进程内,并可以访问所有的AndroidUI工具包,可以使用视图、布局和动画等。所以...
2018-08-06 22:47:46
15744
6
原创 android activity一些相关变更的记录
之前研究的android源代码是基于anroid10的,最近做一个android14的项目,发现activity这一块的一些定义变化蛮大的。在android10上的层级图。在android14上。
2024-11-25 18:00:00
366
原创 android bindService打开失败
解决方案,在使用的bindService的应用的AndroidManifest.xml里面加上queries,类似如下。在写demo验证SurfaceControlViewHost的时候,bindService提示。在源代码里搜了下,找到是在如下方法里面里面打印出来的。后面查了下,发现是包可见性的变更引起的异常。
2024-11-24 18:00:00
508
原创 nodejs里面的event loop
js的标准文档定义如下html的标准定义nodejs自己实现了一套event-loop,与html/js的都不一样。
2023-08-27 21:30:00
331
原创 shell脚本基础语法记录
Shell 支持以下三种定义变量的方式url=chadmecho $urlecho $name# 打印变量有2种方式# (())和let都只能使用整数echo $alet b+=6echo $b注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
2023-08-17 19:36:35
255
原创 void *指针和void参数
指针可以指向任何东西,是一个泛型指针,没有特定的类型。当指向不任何东西的时候,可以设置为NULL。● void foo() 表示foo函数有数量不定且类型不定的参数。指针时,必须注意,当你使用的时候,必须转换成适当的类型。● void foo(void) 表示foo函数没有参数。● void foo(void) 表示foo函数没有参数。● void foo() 表示foo函数没有参数。如果类型转型错误,会在运行时出现非预期的结果。如下代码在C和C++语言里面的区分。在C++语言里面,2者是一致的。
2023-05-31 21:15:00
760
原创 C++ 里面lambda和函数指针的转换
lambda表达式转成函数指针,当lambda没有捕获变量的时候,可以隐式转为指针函数。当包含有捕获变量的时候,可以使用如下方式。
2023-05-27 21:45:00
2938
原创 error: expected ‘;‘ after class
核心观点,为了兼容C语言的语法,可以在struct定义后面加一个类型变量,如下面的示例代码s1。
2023-05-26 20:15:00
769
原创 fs.createwritestream出现异常
fs.createWriteStream创建文件后,往文件里面写的时候出现异常,解决方案是在相应的open回调里面处理相关的逻辑。
2023-05-24 22:00:00
876
原创 promise/function/setTimeout里面的this
【代码】promise/function/setTimeout里面的this。
2023-05-23 21:02:29
141
原创 RFC 7230 HTTP消息语法及路由
HTTP是一个无状态的请求、响应协议,通过一个可靠的传输连接来交换信息。一个Http客户端是一个用来和服务端进行连接的程序,主要是用来发送一个或多个http请求;服务端是用来接受请求连接,响应请求并返回结果URI 统一资源定位符URI(Uniform Resource Identifier)统一资源定位符,在http里面用来识别资源,对应的标准文件是[RFC3986]通用的URI格式定义如下URI = scheme ":" hier-part [ "?" query ] [ "#" fragme
2021-07-02 23:48:37
1057
1
原创 javascript 里面的object
Object的定义首先看一下ECMA-262文档上关于Object的定义6.1.7 The Object Type An Object is logically a collection of properties. Each property is either a data property, or an accessor property: A data property associates a key value with an ECMAScript language value and a
2021-06-24 22:41:38
195
1
原创 Javascript学习系列基础之数据类型和简单语法
变量类型ECMAScript总共定义了7种变量类型, 有 6 种简单数据类型(也称为原始类型)和1种复杂类型Object:UndefinedUndefined 类型只有一个值,就是特殊值 undefined。当使用 var 或 let 声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值let message;console.log(message == undefined); // true包含 undefined 值的变量跟未定义变量是有区别的undefined 值
2021-06-06 00:11:11
129
1
原创 HTTP协议学习导读
HTTP 0.91989年 Tim Berners-Lee 蒂姆·伯纳斯-李在其论文中确立了:URI:统一资源标识符HTML:超文本标记语言HTTP:超文本传输协议对应的论文是:https://cds.cern.ch/record/369245/files/ARCH-WWW-4-010.pdfhttps://cds.cern.ch/record/2639699/files/Proposal_Nov-1990.pdfPS:论文的内容在网上找了很多时间,都只说论文,但是不贴论文地址,有时论
2021-06-06 00:05:55
166
原创 adb命令添加到鼠标右键
平时用adb命令比较多,参考cmder把adb的命令也加到鼠标右键,cmder是REGISTER ALL,不清楚具体注册了哪些,直接在注册表里面搜cmder,对应的位置也添加把如下代码copy到一个registeradb.reg,直接运行就可以添加了Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\adb_logcat]@="adb_logcat"[HKEY_CLASSES_ROOT\*\shell\adb_logcat\
2021-02-08 21:42:23
682
原创 cmder在window 10上配置
Cmder的安装cmder官网: http://cmder.net/Github:https://github.com/cmderdev/cmder配置到鼠标右键把Cmder.exe存放的目录添加到系统环境变量,Win+r一下输入cmder,即可打开在管理员权限的终端输入以下语句即可: Cmder.exe /REGISTER ALL命令执行完后,右键就可以看到cmder选项了把λ替换成#修改vendor/clink.lua文件里面的local lambda = "λ"
2021-02-08 20:53:58
176
原创 android Handler sendMessageDelayed实现原理
之前在看分析Handler实现原理的,有注意到sendMessageDelayed这个方法,最终都调用到了MessageQueue的enqueue方法,最终都到MessageQueue里面的next方法,至于具体怎么实现delay的,没有仔细研究,今天记录一下主要包括2部分的内容:Handler sendMessageDelayed实现原理延时任务实现的几种方式(针对sendMessageDelayed的一些扩展思考)Handler的实现原理,可以参考我之前写的 android Handler消
2021-01-11 12:32:54
2563
原创 Okio原理分析之Segment数据管理
数据移动这一块,主要由3个关键类在控制Buffer 里面保存了一个segment双向循环链表,从head segment读取,从tail segment写入Segment 真正保存数据的类,pos和limit保存了可以读写的位置,shared和owner表示是否可以修改此Segment里面的值SegmentPool 保存了一个单向Segment链表,最大包含有8个Segment。recylce方法加入SegmentPool和take从SegmentPool里面读取,都是从next节点(链表的头节
2021-01-01 20:20:08
996
原创 Okio原理分析之简介
Okio是一个实现java.io和java.nio的库,更方便访问、存储和处理数据。作为OkHttp组件的一部分,在Android中引入支持HTTP的客户端Okio一些关键概念介绍先看一下类图,对整体框架有个大概的了解ByteString和Buffer保存数据ByteString 代表一个不可变的字节序列。对于char数据,String是基础类型。Buffer 可变的字节序列,像ArrayList,读写Buffer的操作与queue类似,从尾部写,从头部读,不需要管理position/limi
2020-12-27 22:03:23
1081
原创 Okio原理分析之字符编码
OKio的原理分析,准备分3个部分来分析:字符编码 先了解一些背景知识,Okio里面基本上是基于UTF-8来编码实现的Okio简介 熟悉OKio里面引入的一些概念,如Source、Sink、Timeout、Buffer、Segment、SegmentPool、ByteString等Okio里面Segment数据移动管理 OKio高效的原因,在数据移动方面的一些巧妙的设计,来节约内存和节省CPU1.字符编码字符编码(Character encoding)、字集码是把字符集中的字符编码为指定
2020-12-27 22:00:04
209
原创 Retrofit-Okhttp-Okio-RxJava
先来一张Jake Wharton 关于 A Few “OK” Libraries 的简介,几个框架的关系前面先分析了RxJava的实现,第一感觉就是和Java 8里面的stream很像,以函数式编程的形式来处理数据,个人理解的核心思想有2个:函数接口 在函数的参数里面,定义了各种函数接口(functional interface),当需要这些参数的时候,有3种方式可以实现通过一个匿名内部类传递lambda表达式在某些情况下,传递方法引用(如System.out::println)而不是lam
2020-12-23 21:08:35
267
原创 RxJava实现原理分析part2-数据处理
先来一个Jack大神的演讲视频Managing the Reactive World with RxJavaBackpressueBackpressue是指一个Flowable管道处理中,有些异步状态无法及时处理产出的值,需要一种方式来告诉upstream降低生产数据的节奏,本质上是一种flow control策略。如下例子,source产出了过多的数据,会导致downstream处理不及时而导致问题 PublishProcessor<Integer> source = Publ
2020-12-18 23:01:40
441
2
原创 RxJava分析系列之RxJava实现原理分析part1
从RxJava实现原理,个人理解,主要从4个方面来说明Lambda表达式和Stream,函数式编程观察者模式的实现Scheduler线程切换的原理数据流的处理,针对5个基础类Flowable、Observable、Single、Completable、Maybe,也是最核心的部分1.Lambda表达式和Stream首先是 functional interface ,函数接口,RxJava里面也定义了很多functional interface,方便操作,在io.reactivex.rxjav
2020-12-16 00:06:12
437
原创 RxJava分析系列之RxJava 简介
1.RxJava 简介RxJava是一个通过可观察的序列方式实现异步和基于事件的响应式Reactive编程,RxJava 是实现了reactive-streams-jvm 定义了规范,4个有主要接口Publisher,发布者(生产者)Subscriber,订阅者(消费者)Subscription,订阅Processor,处理者RxJavae3 提供了5个基础类,来进行相关的操作io.reactivex.rxjava3.core.Flowable: 0…N flows, 支持响应式编程和
2020-12-16 00:03:21
1022
1
原创 android里面的Service的一些理解
android系统里面的Service是平时接触很多的,主要分为2类,系统服务SystemService和用户自定义服务Service。有2种方式可以获取系统服务ContextImpl.getSystemService 是Android提供获取系统服务的API接口,返回保存SystemServiceRegistry 类里面的系统服务,类似ActivityManager,里面有一个IActivityManager,通过Binder和ActivityManagerService的通信。ServiceM
2020-12-08 22:24:11
894
原创 android Activity LaunchMode原理解析
1.launchMode介绍android:launchMode共有四种模式可与 Intent 对象中的 Activity 标记(FLAG_ACTIVITY_* 常量)协同工作,以确定在调用 Activity 处理 Intent 时应执行的操作。这些模式是:standardsingleTopsingleTasksingleInstance默认模式是“standard”。这些模式可分为两大类:standard和singleTop 为一类,可多次进行实例化使用standard或sin
2020-12-06 12:21:53
822
原创 JSR 175 Java 注解
注解是一种特殊的接口 ,Annotation是一种元数据,提供了程序的一些信息,但不是程序的一部分,注解对有注解的程序执行没有任何影响There are two kinds of interface declarations - normal interface declarations and annotation type declarations (§9.6).用@来向编译器说明这是一个annotation,注解主要有3种用途通知编译器,检查错误和警告编译时和部署时处理,可以用注解来生成
2020-12-04 21:50:42
258
原创 JSR 335 Lambda Expressions学习系列
JSR 335: Lambda Expressions for the JavaTM Programming Language主要分为3篇来学习Java里面的functional interfaceJava里面Lambda表达式Java里面的StreamJSR 335提供的API包括新类和现有类的添加。新增加的包java.util.function 包包含通用功能接口,这些接口为lambda表达式和方法引用提供目标类型。java.util.stream 包含Streams功能的大多数接
2020-12-02 22:12:45
196
原创 JSR 335 之Java中的Stream
1.函数式编程函数式编程(英语:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。λ演算(lambda calculus)为该语言最重要的基础。而且,λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。比起指令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。在函数式编程中,函数是第一类对象(第
2020-12-02 22:10:26
281
原创 Specification 文档学习
知其然,知其所以然Java相关的JSR 335 - Java Lambda表达式: Lambda Expressions for the JavaTM Programming LanguageJSR 166 - Java 并发: Concurrency UtilitiesJSR 133 - Java 内存模型: JavaTM Memory Model and Thread Specification RevisionJSR 203 - Java NIO: More New I/O APIs fo
2020-11-30 22:13:14
300
原创 Java CompletionStage和CompletableFuture
1.CompletionStageCompletionStage表示一个异步计算的可能阶段,当另一个CompletionStage完成时,会执行一个操作或计算一个值。CompletionStage接口里面的方法,主要由几个关键单词组成的apply/accept/run 、 then/both/either 和async 组合成各方法的含义1.1 CompletionStage的执行方式一个新的CompletionStage的执行方式有3种同步执行异步执行,在一个ForkJoinPool线程池里
2020-11-30 21:41:33
2227
原创 JSR 335之Java里面Lambda表达式
Lambda表达式也是Java 8引入的新特性(JSR 335),Lambda 表达式把函数式编程风格引入到了 Java 平台上,可以极大的提高 Java 开发人员的效率。详细说明见15.27. Lambda ExpressionsLambda 表达式的语法很灵活。它们的声明方式类似 Java 中的方法,有形式参数列表和主体。LambdaParameters -> LambdaBody从定义形式来看,主要由3个部分组成:-> 符号,代表是Lambda表达式参数的类型是可选的。在不
2020-11-28 22:01:12
218
原创 JSR 335 之 Java里面的functional interface
1.函数式编程在介绍functional interface前,先简单说明一下函数式编程函数式编程的定义如下:“函数式编程是一种编程范式。它把计算当成是数学函数的求值,从而避免改变状态和使用可变数据。它是一种声明式的编程范式,通过表达式和声明而不是语句来编程对函数式编程支持程度高低的一个重要特征是函数是否作为编程语言的一等公民出现,也就是编程语言是否有内置的结构来表示函数。作为面向对象的编程语言,Java 中使用接口来表示函数functional interface 是在JDK 8里面引入的,定义在
2020-11-28 21:54:07
231
转载 Unix、类Unix、Linux、Linux发行版
聊一聊GNU/Linux 与开源文化的那些人和事比特波特11月9日 08:00 关注本文只梳理大致的脉络,不做详尽的叙述。一、计算机的发明世上本无路,走的人多了,就有了路。世上本无计算机,琢磨的人多了……没有计算机,一切无从谈起。三个人对计算机的发明功不可没,居功至伟。阿兰·图灵Alan Mathison Turing、阿塔那索夫John Vincent Atanasoff、和冯·诺依曼John von Neumann。图灵从理论上证明了计算机的可行性;阿塔那索夫实践了图灵的理论;冯·诺依曼奠定了现代计算
2020-11-28 17:24:53
1302
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人