Android
文章平均质量分 84
__Yvan
我就是我独一无二
展开
-
【Kotlin精简】第9章 Kotlin Flow
Flow是google官方提供的一套基于Kotlin协程的响应式编程模型,它与RxJava的使用类似,但相比之下Flow使用起来更简单,另外Flow作用在协程内,可以与协程的生命周期绑定,当协程取消时,Flow也会被取消,避免了内存泄漏风险。Flow是Kotlin提供的一个工具,使用协程封装成生产者-消费者模式。上游来负责生产、中介进行数据加工(可选)、下游来接收消耗。原创 2023-11-24 16:31:42 · 690 阅读 · 0 评论 -
【Kotlin精简】第8章 协程
在 Android 平台上,协程主要用来解决两个问题:1. 处理耗时任务 (Long running tasks),这种任务常常会阻塞住主线程;2. 保证主线程安全 (Main-safety) ,即确保安全地从主线程调用任何 suspend 函数。特点一句话总结:协程能更加安全实现异步代码同步化,实质是对线程切换的封装原创 2023-11-14 16:54:22 · 778 阅读 · 2 评论 -
【Kotlin精简】第7章 泛型
泛型即 “参数化类型”,将类型参数化,可以用在类接口函数上。与Java一样,Kotlin也提供泛型,为提供保证,的烦恼。原创 2023-11-05 16:22:28 · 553 阅读 · 0 评论 -
【Kotlin精简】第6章 反射
反射是一种在运行时动态访问对象属性和方法的方式,而不需事先确定这些属性是什么。一般来说当你访问一个对象的方法或者属性时,程序的源代码会因用一个具体的声明,编译器将静态解析这个引用并确保这个声明是存在的。但有时候你要编写能够使用任意类型的对象的代码,或者只能在运行时才能确定要访问的方法和属性的名称。原创 2023-10-24 22:51:16 · 1125 阅读 · 0 评论 -
【Kotlin精简】第5章 简析DSL
Kotlin DSL是一种强大的工具,可以帮助我们编写更简洁、优雅的代码。通过使用Kotlin DSL,我们可以提高代码的可读性、灵活性和类型安全性。当然Android中DSLDSL 是什么?DSL 是一种针对特殊编程场景的语言或范式,它处理效率更高,且表达式更为专业。例如 SQL、HTML、正则表达式等。Kotlin 如何支持 DSL通过 扩展函数、带接收者的函数类型等来支持使用 DSL。Kotlin 自定义 DSL 的优势。原创 2023-10-22 14:37:46 · 526 阅读 · 0 评论 -
【Kotlin精简】第4章 函数
函数是用来运行代码的载体,可以在一个函数里编写很多行代码,当运行这个函数时,函数中的所有代码会全部运行。Kotlin中的函数同Java完全面向对象的规则不太一样,在Kotlin的世界里,函数也是准C位的,同面向对象一样属于一等公民,Kotlin也提倡函数式编程。Kotlin中的函数分为普通函数中缀函数局部函数泛型函数尾递归函数扩展函数内联函数高阶函数lambada函数等。原创 2023-10-15 17:22:13 · 469 阅读 · 0 评论 -
【Kotlin精简】第3章 类与接口
Kotlin类的声明和Java没有什么区别,Kotlin中,类的声明也使用class关键字,如果只是声明一个空类,Kotlin和Java没有任何区别,不过定义类的其他成员会有一些区别。实例化类不用写new,类被继承或者重写必须加上open关键字,构造器可以写在类后面。构造函数属性方法。Kotlin接口和Java的抽象类基本类似,可以有抽象方法,也可以有方法体。但override作为关键字使用,而不是注解。原创 2023-10-14 17:47:37 · 500 阅读 · 0 评论 -
【Kotlin精简】第2章 集合
在 Kotlin 中集合主要分为可变集合与只读集合,其中可变集合使用 “Mutable” 前缀 + 集合类名表示,比如MutableSetMutableMap等。而对于只读集合就是和 Java 中集合类名是一致。Java 中的 List 非 Kotlin 中的 List , 因为 Kotlin 中的,却有点类似于 Kotlin 中的。只读集合可变集合addremoveclear集合是可变数量的一组条目。List: 是有序集合,可以通过下标访问元素,元素可以重复。Set。原创 2023-10-08 18:04:20 · 615 阅读 · 0 评论 -
【Kotlin精简】第1章 基础类型
Kotlin中,我们可以调用任何变量的成员函数和属性,从这个角度来说,一切皆对象。某些类型可以有特殊的内部表现。数字字符和布尔型在运行时可以表现为。原创 2023-10-07 17:26:24 · 357 阅读 · 0 评论 -
【Android Framework系列】第17章 Android Q沙箱模式(Scoped Storage)
App TargetSDK > 28 即 Android10(Q)及以上项目,Google限制了存储沙箱模式,在Android10(Q)以上的设备建议使用私有目录data/data,无法再直接访问外部SD卡存储目录,如需要使用外部SD卡存储目录则需要通过SAF、MediaStore接口访问,并且只能访问特定的外部SD卡存储目录,如Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones原创 2023-09-23 16:29:01 · 2068 阅读 · 0 评论 -
【Android Framework系列】第16章 存储访问框架 (SAF)
本章节大概了解SAF框架,我们下一章将对Android Q的沙箱模式(Scoped Storage)进行介绍。原创 2023-09-23 11:06:42 · 3790 阅读 · 0 评论 -
【Android Framework系列】第15章 Fragment+ViewPager与Viewpager2相关原理
ViewPager只能横向滚动,对应不同的Adapter效果不一样。范围外fragments会保存在内存中(detach),但是fragment对应的View会被销毁,fragments对应的SavedState会保存,内存较大但页面切换更友好,适用于Fragment数量少的情况使用,范围外fragments不会保存在内存中(remove),View也会被销毁。只保存范围内fragments对应的SavedState。这个SavedState在Fragment的生命周期回调中供外部传参数。原创 2023-09-21 11:02:13 · 1035 阅读 · 0 评论 -
【Android Framework系列】第14章 Fragment核心原理(AndroidX版本)
Fragment是一个历史悠久的组件,从API 11引入至今,已经成为Android开发中最常用的组件之一。Fragment表示应用界面中可重复使用的一部分。Fragment定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。Fragment不能独立存在,而是必须由Activity或另一个Fragment托管。Fragment的视图层次结构会成为宿主的视图层次结构的一部分,或附加到宿主的视图层次结构。本章节主要探索Fragment的生命周期状态及事务管理。原创 2023-09-04 17:35:55 · 1176 阅读 · 0 评论 -
【Android Framework系列】第13章 SVG矢量图形自定义组件(绘制中国地图)
本章节我们来了解下什么是矢量图形,怎么通过实现图形的绘制,通过实现不规则的自定义控件,项目实现一个中国地图,实现每个省都能够点击,项目地址在文末请自取。与其他图像格式相比,使用的优势在于:一般是由 UI设计师来做,我们也需要大概了解一下:编辑SVG地址在线编辑SVGSVG语法教程地图数据矩形2.5 Path支持的指令:3 项目实战上面我们大概了解了是什么,有什么优势。接下来我们用实现一个中国地图的展示及点击选中省份的小项目来练练手。项目结构如上图所示:直接上代码R.layout.acti原创 2023-08-31 21:05:09 · 1494 阅读 · 2 评论 -
【Android Framework系列】第12章 RecycleView相关原理及四级缓存策略分析
RecyclerView是一款非常强大的widget,它可以帮助您灵活地显示列表数据。当我开始学习 RecyclerView的时候,我发现对于复杂的列表界面有很多资源可以参考,但是对于简单的列表展现就鲜有可参考的资源了。虽然RecyclerView的组成结构乍一看有些复杂,但是深入理解以后您会发现它其实非常简单明了。原创 2023-08-27 18:11:31 · 1466 阅读 · 2 评论 -
【Android Framework系列】第11章 LayoutInflater源码分析
的作用是把XML转化成对应的View对象,需要用或者获取加载时先判断是否是merge标签merge标签走递归方法rinflate,否则走作用是根据xml标签的名字去加载对应的View,使用的是反射的方法是设计出来灵活构造View的接口,可以用来实现换肤或者替换View的功能,同时也是用来做兼容和版本替换的接口。原创 2023-08-16 21:30:57 · 331 阅读 · 0 评论 -
【Android Framework系列】第10章 PMS之Hook实现广播的调用
到这里我们就完成了整个动态下发apk的调用及被调用,这里我们再稍微总结一下:主要通过HookPMS实现将动态下发的apk进行解析,将信息存储在PMS内,然后对PMS中装有信息的receivers集合拿到,程序(Client)发送广播给动态下发apk内定义好的广播(Server),该广播(Server)对程序(Client)作出回应,然后在程序(Client)接收回应(类似TCP的三次握手逻辑)。从而实现本章节对PMS进行Hook的目的。文章只做核心HookPMS代码思路的分析,这里是项目地址!原创 2023-08-14 21:25:28 · 605 阅读 · 2 评论 -
【Android Framework系列】第9章 AMS之Hook实现登录页跳转
本章节通过反射和动态代理对不同Android版本下AMS进行Hook,实现登录页面的跳转。原创 2023-08-01 16:39:22 · 1708 阅读 · 1 评论 -
【Android Framework系列】第8章 事件分发你真了解吗?
最后总结一下,事件分发就是事件从linux层通过驱动采集数据,底层使用epoll和inotify传递出来,FrameWork层通过InputReaderThread读取,通过InputDispatcherThread分发到WMS,WMS将事件传递到Activity,上层的Activity、ViewGroup、View之间事件的分发和消费。dev/inputlinux有提供相关的文件监控api,其中使用了inotify(能监控文件变化产生FD)和epoll(可以监控FD,以此配合完成文件的监控与监听)原创 2023-07-25 16:26:40 · 959 阅读 · 1 评论 -
【Android Framework系列】第7章 WMS原理
简称WMS,是系统的核心服务,主要分为四大部分,分别是窗口管理窗口动画输入系统中转站和Surface管理。1.窗口管理:WMS是窗口的管理者,负责窗口的启动,添加和删除,另外窗口的大小也是由WMS管理的,管理窗口的核心成员有DisplayContent,WindowToken和WindowState。窗口的显示顺序、尺寸、位置, 最终都会反馈SurfaceFlinger。原创 2023-07-17 17:31:37 · 2211 阅读 · 0 评论 -
【Android Framework系列】第6章 AMS原理之Launcher启动流程
我们在上一章节【Android Framework系列】5章 AMS启动流程中简单的分析了,这一章节我们来了解一下,通过是怎么完成下面我们通过一起来看看本文基于Android10(Q)的源码做分析由【Android Framework系列】5章 AMS启动流程我们可以知道:我们就从方法开始继续分析:/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java这里为对象,而方法直接调用的是对象的该原创 2023-07-13 22:20:59 · 1242 阅读 · 2 评论 -
【Android Framework系列】第5章 AMS启动流程
系统启动后Zygote进程第一个fork出SystemServer进程创建了系统的对象,运行环境。AMS在引导服务启动方法中,通过构造函数进行了一些对象创建和初始化(除activity外3大组件的管理和调度对象创建;内存电池权限性能cpu等的监控等相关对象创建),start()启动服务(移除进程组启动cpu线程注册权限电池等服务)。AMS创建后进行了一系列相关的初始化和设置。:将framework-res.apk的信息加入到SystemServer进程的LoadedApk中,并创建了。原创 2023-07-11 14:47:57 · 1346 阅读 · 0 评论 -
【Android Framework系列】第4章 PMS原理
PMS是包管理系统服务,用来管理所有的包信息,包括应用安装卸载更新以及解析AndroidManifest.xml。手机开机后,它会遍历设备上/data/app/和目录下的所有apk文件,通过解析所有安装应用的,将xml中的数据(应用信息权限四大组件等)信息都缓存到内存中,后续提供给AMS所需要的数据,它是具有保存应用数据的缓存。手机开机,内核进程启动init进程init进程启动SeriviceManager进程和启动Zygote进程Zygote进程启动进程启动AMSPMS。原创 2023-07-01 11:46:53 · 2151 阅读 · 1 评论 -
【Android Framework系列】第3章 Zygote进程相关
Zygote是Android中最重要的一个进程,Zygote进程和Init进程、SystemServer进程是Android最重要的三大进程。Zygote是Android系统创建新进程的核心进程,负责启动Dalvik虚拟机,加载一些必要的系统资源和系统类,启动system_server进程,随后进入等待处理app应用请求。原创 2023-06-28 15:58:16 · 1225 阅读 · 0 评论 -
【Android Framework系列】第2章 Binder机制大全
Binder是Android中主要的跨进程通信方式,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案。只需要拷贝一次,基于C/S架构,易用性高,系统为每个APP分配UID同时支持实名和匿名更安全原创 2023-06-23 23:54:48 · 4018 阅读 · 1 评论 -
【Android Framework系列】第1章 Handler消息传递机制
Android的Handler消息机制。原创 2023-06-05 01:08:22 · 2728 阅读 · 1 评论 -
【Android车载系列】第14章 车载渲染-分屏显示的实现
本章节通过获取Android系统的Display,使用Display+Presentation或Display+Activity实现分屏展示。最后通过MediaProjection录屏采集主屏幕数据,通过Display+Activity+OpenGL方式实现副屏同主屏的渲染。原创 2023-05-15 00:33:09 · 2475 阅读 · 2 评论 -
【Android车载系列】第13章 车载渲染-OpenGL实现屏幕渲染
本章使用OpenGL实现了摄像头数据采集和渲染在屏幕上,也大概了解了一下CPU和GPU相关的知识,目前只是实现了OpenGL渲染部分,车载智能坐舱分屏显示可通过该方案加入分屏显示来实现。项目地址。原创 2023-05-11 22:10:23 · 995 阅读 · 0 评论 -
【Android车载系列】第12章 车载渲染-SurfaceFlinger单独绘制到界面
车载的同学们知道是怎么实现的吗?等待Android设备开机再打开倒车影像App?车子挂到R档倒车如果等待这个流程实在太久,是否还有其它办法可以让车子挂R档直接展示倒车影像呢?大家思考一下。我们从Android渲染的基础上思考,Android图像渲染到屏幕上通过完成,如果我们不通过App的Surface来完成对SurfaceFlinger的调用,是否可以直接通过某些方式拿到SurfaceFlinger把图像绘制在屏幕上?原创 2023-05-06 22:10:09 · 1736 阅读 · 2 评论 -
【Android车载系列】第11章 系统服务-SystemServer自定义服务
system/sepolicy/prebuilts/api/32.0/private/ 与 system/sepolicy/private/目录下,分别修改以下三个文件#配置自定义服务selinux角色用户:角色:类型:安全级别#配置自定义服务类型的权限#允许所有app使用自定义服务一般只是用来调试自己的服务功能是否正常} } // 使用 YvanManager yvanManager =(YvanManager) getSystemService("yvan");原创 2023-05-03 15:04:05 · 961 阅读 · 0 评论 -
【Android车载系列】第10章 系统服务-SystemServer源码分析(API28)
SystemServer进程启动,startBootstrapServices() 底层启动引导服务;startCoreServices()用户层启动核心服务;startOtherServices()应用层启动其它服务。车载服务CarServiceHelperService的启动。原创 2023-04-24 22:17:05 · 1560 阅读 · 0 评论 -
【Android车载系列】第9章 车载通信-Socket实现IPC通信机制(实现仿FDBus效果)
用于车载多台Android设备间的跨设备通信,实现方案为通过Socket实现IPC通讯,通过动态代理实现类方法的调用,从而实现设备间的通信。原创 2023-04-24 10:58:59 · 3347 阅读 · 1 评论 -
【Android车载系列】第8章 车载通信-USB协议代码实现
USB协议我们从理论到代码过了一遍,相信聪明的小伙伴应该有所收获。最后做下总结吧,USB协议是一套完整的传输协议,使用其传输的两端必须按照一致的指令协议来实现通讯,实现读写操作。对于Android开发来说,能够掌握基本的USB读写操作就可以了,具体协议的详细在需要用到的时候再查找文档对应实现。日常开发和工作中的数据读写操作,大部分都需要自定义协议,可以参考U盘等这些USB设备的协议来自定义一套适合自己的协议。原创 2023-04-05 15:28:11 · 1472 阅读 · 3 评论 -
【Android车载系列】第7章 车载通信-USB通信原理
通用串行总线 (Universal Serial Bus,USB) 是一种新兴的并逐渐取代其他接口标准的数据通信方式,由 Intel、Compaq、Digital、IBM、Microsoft、NEC及Northern Telecom 等计算机公司和通信公司于1995年联合制定,并逐渐形成了行业标准。原创 2023-04-02 11:10:32 · 1730 阅读 · 2 评论 -
【Android车载系列】第6章 车载通信-串口通信原理
串口简要介绍及串口在Android实现通讯原创 2023-03-30 21:26:54 · 1781 阅读 · 1 评论 -
【Android车载系列】第4章 Activity启动到渲染到SurfaceFlinger流程
ActivityThread对于App进程来说,它是App的入口。此外ActivityThread还实现了创建主线程Looper、dump应用内存使用情况、获取应用包名等接口。我们看看ActivityThread对于四大组件的作用,一句话概括,ActivityThread管理着四大组件的生命周期方法的调用。attach()然后开始了Activity的生命周期。执行执行时页面还不可见,onResume()VSYNConResume()将DecorView添加到中。原创 2023-03-26 20:12:41 · 1077 阅读 · 0 评论 -
【Android车载系列】第3章 车载通讯CAN协议
0的位数代表数据的长度N,从第一个不为0的bit开始读N个后缀;编码+1,解码-1。例如:1.要发送的信号为3,编码前+1为4,二进制为100,1后面为两个0,最终报文前面需要添加两个0作为后补长度,所以报文数据是00100。2.解码时前面两个0为第一个不为0的bit开始补两位,解出100数据十进制为4,由于编码+1,解码需要-1,4-1=3为最终解码十进制结果。原创 2023-03-26 15:22:50 · 5754 阅读 · 0 评论 -
【Android车载系列】第2章 车载系统启动与CarService
..default:= null) {CarService实现的功能几乎就是覆盖整个车载Framework的核心。然而现实中为了保证各个核心服务的稳定性,同时降低CarService协同开发的难度,一般会选择将一些重要的服务拆分单独作为一个独立的Service运行在独立的进程中,导致有的车机系统中CarService只实现了CarPropertyService的功能。CarService实现流程可以这样理解:提供。原创 2023-03-24 10:09:56 · 3737 阅读 · 0 评论 -
【Android车载系列】第1章 车载系统整体介绍
汽车操作系统是从传统汽车电子不断演变而来的,传统汽车电子产品可分为两类:一类是汽车电子控制装置,通过直接向执行机构(如电子阀门、继电器开关、执行马达)发送指令,以控制车辆关键部件(如发动机、变速箱、动力电池)协同工作,这类系统一般统称为电子控制单元 (ECU另一类是车载电子设备,如仪表、娱乐音响、导航系统、HUD等,这类系统不直接参与汽车行驶的控制决策,不会对车辆行驶性能和安全产生影响,通常统称为车载信息娱乐系统(IVI这也是Android程序员主要负责的领域。原创 2023-03-17 20:43:32 · 10503 阅读 · 3 评论 -
【Flutter入门到进阶】Flutter基础篇---动画
隐式动画显式动画自定义隐式动画、自定义显式动画Hero 动画AnimatedContainer的属性和Container属性基本是一样的,当AnimatedContainer属性改变的时候就会触发动画。flag;});原创 2023-03-06 15:59:29 · 1580 阅读 · 0 评论