- 博客(113)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 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
7999
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JSR 166 Concurrency学习系列文章
主要涉及到2个标准JSR 133 Java Memory ModuleJSR 166 Concurrency先学习并发编程出现问题的原因1.java 并发的一些基础知识然后再了解Java语言提供的解决方案1.volatile、final和synchronized2.wait-notify-sleep-interrupt-join方法的一些理解进阶学习java.util.concurrent包里面的内容,Java提供的性能和扩展性更高的解决方案,主要分如下几篇来讲解1.Java 并发编程框
2020-11-18 23:39:58
789
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 android RoleManagerService
之前在项目过程中,遇到P版本升级到Q版本,有2个默认应用发生变化的问题,浏览器和语音助手,都变成Google的应用,记录一下分析的过程1.RoleManagert和RoleManagerService相关的介绍RoleManager就android Q版本新增加的特性,主要用来管理默认应用设置的,目前支持的Role有8种public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";public static fina
2020-11-11 22:04:50
5116
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 android里面的Activity体系结构(1)_ActivityDisplay/ActivityStack/TaskRecord/ActivityRecord
本文主要从3个方面来介绍这几个类之间的关系,先从整体关系图,对4个类的关系有个大概的了解,然后通过dumpsys命令,来验证这种关系;然后从类定义的角度来看,4个类是如何互相包含的;最后从Activity启动的流程过程来看4个类是如何关联上来的。通过阅读本文,能对ActivityDisplay/ActivityStack/TaskRecord/ActivityRecord的关系有个整体的认识和理解1.整体关系图如下通过adb shell dumpsys activity activities 命令可
2020-09-19 14:45:26
1801
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 实用VBA代码
打开Excel表格Function openExcel(name As String) Dim wb As Workbook Dim sheetFrom As Worksheet '判断文件是否存在 If Dir(name) <> "" Then Debug.Print name + "文件存在&q
2018-08-11 00:20:28
7930
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 android 屏保 (PowerManager & DreamService)
一、应用中使用DreamService1.DreamService简介 白日梦是Android设备的新型互动屏保模式。当设备置入底座或充电闲置状态时(屏幕没有关闭),此模式自动激活。白日梦模式每次显示一个,可以是纯粹的视觉效果,在用户触摸时消失,也可以是响应用户所有输入的交互式应用。您的白日梦将运行在您应用的进程内,并可以访问所有的AndroidUI工具包,可以使用视图、布局和动画等。所以...
2018-08-06 22:47:46
14414
6
原创 nodejs里面的event loop
js的标准文档定义如下html的标准定义nodejs自己实现了一套event-loop,与html/js的都不一样。
2023-08-27 21:30:00
233
原创 shell脚本基础语法记录
Shell 支持以下三种定义变量的方式url=chadmecho $urlecho $name# 打印变量有2种方式# (())和let都只能使用整数echo $alet b+=6echo $b注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
2023-08-17 19:36:35
212
原创 android 面试题目之handler消息机制
针对问题5,面试字节的时候被问的一个题目,当时回想了下框架的代码,发现只有一个计算时长的,但是具体是在哪个地方处理的,还不知道。针对问题3,大部人也都知道是在ActivityThread里面创建的。针对问题4,深入了解的话,需要对epoll机制有一些了解,跟进到jni层的实现。Handler消息机制是Android里面很基础的东西,基本上属于必考题。针对问题2,属于比较常见的场景,能说清楚就行。如果连这个都不知道,就感觉有点业余了。一般会从如下几个方面来考查。针对问题1,大部人都知道。
2023-07-25 17:05:31
368
原创 android面试题目之音频焦点
问题3,相对专业一点,编码格式区别,是否会dump音频或者视频文件分析,ffmpeg工具有没有了解使用过,直播的推流。一般面试过程中,使用的都是三方的SDK,这些细节都不清楚。问题2,主要是关注实际使用过程中可能会遇到的问题,比较说加载失败、弱网、重试,蓝牙耳机&外放&听筒切换等。现在很多应用都音视频相关的功能点,这个也是现在用的很多的一个功能,一般会问如下几个问题。问题1主要关注的是对音频策略的了解,有音频通道的概念,不同音频应用的配合方法。
2023-07-06 23:18:41
281
原创 android面试题目之activity launchMode
针对问题4,难度更大一些,AMS里面的东西相当多,另外还有ATMS,从AMS里面抽出来的,其中比较关键的一些点,这个里面的问题,不要求一定会,有个了解就行。这个里面是框架层面实现的机制,大部分可能都没有了解过,了解这些,前面的那些问题再怎么变,也变不出这个框架设计的范围。针对问题1,主要是考察2个点,onNewIntent的调用时机,以及在不同场景下,activity栈是怎样管理。针对问题2,就和具体的业务相关,比较能考查实际的理解情况,问题1考是什么,问题2是为什么。
2023-07-02 12:15:21
237
原创 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
702
原创 C++ 里面lambda和函数指针的转换
lambda表达式转成函数指针,当lambda没有捕获变量的时候,可以隐式转为指针函数。当包含有捕获变量的时候,可以使用如下方式。
2023-05-27 21:45:00
2312
原创 error: expected ‘;‘ after class
核心观点,为了兼容C语言的语法,可以在struct定义后面加一个类型变量,如下面的示例代码s1。
2023-05-26 20:15:00
642
原创 fs.createwritestream出现异常
fs.createWriteStream创建文件后,往文件里面写的时候出现异常,解决方案是在相应的open回调里面处理相关的逻辑。
2023-05-24 22:00:00
591
原创 promise/function/setTimeout里面的this
【代码】promise/function/setTimeout里面的this。
2023-05-23 21:02:29
105
原创 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
869
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
167
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
106
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
142
原创 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
594
原创 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
136
原创 android Handler sendMessageDelayed实现原理
之前在看分析Handler实现原理的,有注意到sendMessageDelayed这个方法,最终都调用到了MessageQueue的enqueue方法,最终都到MessageQueue里面的next方法,至于具体怎么实现delay的,没有仔细研究,今天记录一下主要包括2部分的内容:Handler sendMessageDelayed实现原理延时任务实现的几种方式(针对sendMessageDelayed的一些扩展思考)Handler的实现原理,可以参考我之前写的 android Handler消
2021-01-11 12:32:54
2370
原创 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
901
原创 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
975
原创 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
178
原创 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
226
原创 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
361
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
382
原创 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
937
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
799
原创 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
730
原创 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
237
原创 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
161
原创 JSR 335 之Java中的Stream
1.函数式编程函数式编程(英语:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。λ演算(lambda calculus)为该语言最重要的基础。而且,λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。比起指令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。在函数式编程中,函数是第一类对象(第
2020-12-02 22:10:26
248
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人