自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android-详解网络请求框架-OkHttp(源码)

前言1.OkHttp的优点网络方面(1)它支持http2.0,在网络请求响应方面使用了多路复用;(2)内置连接池,减少连接开销,复用连接;(3)内有Response缓存,缓存响应,避免重复的请求;(4)对响应体支持gzip压缩,使得传输数据更为轻量;(5)支持SPDY,允许连接同一主机的所有请求分享一个socket;拓展方面(1)支持重定向,重试请求,重写编码拦截器;(2)支持头部信息拦截,自带CookieJar方法;(3)支持网络数据传输时的监听;(4)通过需求能自定义拦截器进行处

2020-12-06 23:42:42 1561

原创 [AOSP] [JNI] [Android] AOSP中使用JNI

*,目的是为了方法可以被正确调用,以及传递了env对象(jni里的东西),再来看一遍我创建的jni文件,frameworks/base/services/core/jni/com.android.server.keepalive.KeepAliveManagerService.cpp。,由包名+类名组成,然后实现对应上层的native方法即可,方法名称最好相同(也可以不同,只要在注册函数的第一个参数中对应起来就行),例如下方法,方法可以直接使用来注册jni方法,但是为了更深刻的理解,我们手动来实现。

2023-10-03 13:09:05 553

原创 [AOSP] 如何创建系统服务

可以看到生成了out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/api-stubs-docs-non-updatable_api.txt,就是需要将该aidl内容输出到该文件中。原因是因为我是frameworks/base/core/java/android下创建的模块,可以直接通过android.xxx访问,不出意外的话模块下所有文件的包名就是。

2023-10-03 13:08:03 374

原创 [LMKD] [Android] 进程OomAdj调整分析:Empty被Kill流程(4)

内存因子参数= 0;表示正常的内存等级,内存不紧张,通常empty和cached进程数量较多的情况下会是正常= 1;表示存在6~13个empty&&cached进程,内存紧张水平不算太高—不是很紧张= 2;表示存在4~5个empty&&cached进程,属于低内存状态了= 3;表示存在1~3个empty&&cached进程,也属于低内存状态内存因子对应的内存level介绍= 80;最大内存水平,代表内存非常紧张,表示手机目前内存已经很低了,并且我们的程序处于LRU缓存列表的最边缘位置。

2023-10-03 13:04:39 851

原创 [LMKD] [Android] 进程OomAdj调整分析:OomAdjuster分析(3)

10.如果服务端的hasExternalProcessHandles为真,说明有外部依赖关系(我想可能是服务端持有了某些数据,依赖了客户端之类),并发现服务端进程adj值非前台(非FOREGROUND_APP_ADJ),则会直接赋予前台adj值,进程状态也会被赋予PROCESS_STATE_IMPORTANT_FOREGROUND----也就是服务端非前台adj的时候,具有该标志性,会将服务端的adj和进程状态优先级拉高,保活率更高。主要作用就是根据客户端进程状态,调整服务端进程状态,依赖性。

2023-10-03 13:03:57 1024

原创 [LMKD] [Android] 进程OomAdj调整分析:OomAdj调整次数(2)

在服务启动流程中,如果发现了DeadObjectException异常,则会通过ASM去杀进程,意思是服务创建过程中,Application死亡,主进程不存在的情况——这里又在想,主进程都死亡了,还去杀进程干啥?非也非也,进程被杀了也需要进行清理动作,进程从Lru移除等动作。调整进程的oomAdj值和进程状态,这里就是AMS#updateOomAdjLocked,并开始进入OomAdjuster.java中调整进程优先级,具体怎么调整的暂不分析,后面分析,这里只分析入口在哪。

2023-10-03 13:03:01 564

原创 [LMKD] [Android] 进程OomAdj调整分析:OomAdj状态简要(1)

oomAdj是Android系统中的一个进程内存管理参数,它决定了系统在内存不足时回收进程的顺序。oomAdj的值越小,说明该进程越重要,越不容易被系统回收。Android系统会根据进程的oomAdj值来决定哪些进程应该被回收,以达到最大限度地提高系统的稳定性和性能。

2023-10-03 13:02:17 650

原创 [Android] [AOSP] LMK进程优先级策略

在AOSP中,Low Memory Killer(LMK)是一种内存管理机制,它根据进程的优先级来决定哪些进程应该被终止以释放内存。这个机制通过内核任务(kswapd)来实现,该任务不断扫描内存使用情况,并在内存不足时触发LMK机制。在LMK机制中,每个进程都被分配了一个优先级,当内存不足时,系统会根据进程的优先级选择性地终止某些进程,以释放更多的内存。

2023-10-03 12:59:27 453

原创 [AOSP] 开机卡Logo问题分析

首先要区分卡第一帧logo还是卡第二帧logo,注意kernel层进入到用户空间层,会走first,selinux,second三大阶段,这三大阶段执行完成init进程才算启动完成如果是卡第一帧logo,需要排查系统启动进行到哪个阶段了,如果first阶段执行完成后是有kernel日志输出的,还有看看kernel的lk是否有成功启动或者异常信息如果是卡第二帧logo,说明是执行到了second阶段,init.rc已经解析,主要排查zygote重启的原因如果是卡第一帧logo,都可以尝试替换只读分区,

2023-10-03 12:58:15 285

原创 [Android] Input事件分发流程之上层事件分发机制(4)

native层会通过InputChannel(在WMS.addWindow中被创建,一个客户端一个服务端)上报事件到上层上层通过来监听事件的到来,然后调用的process方法然后在process方法中执行了,mView就是DecorView,所以会调用Decorview中的方法从而经过PhoneWindow,调用到Activity的方法所以事件都是从Activity开始分发处理的,然后分发给PhoneWindow,继续调用到DecorView的然后继续调用到ViewGroup的。

2023-10-03 12:56:50 340

原创 [Android] Input事件分发流程之InputDispatcher(3)

以上代码为判断是不是新手势 (从down按下开始),然后将触摸事件(哪块设备,哪块屏幕,是否属于down事件)保存到tempTouchState中,然后根据触摸的x,y坐标和displayId(哪块屏幕),去找到发生触摸事件的window(去找到手势监控器,因为每个触摸过的window都有一个手势监控器,将手势监控器和window窗体都保存到tempTouchState中,再检查window权限是否可以将事件注入到该window上,若权限通过,则遍历。所以view事件分发就是客户端发给服务端的一个流程。

2023-10-03 12:56:07 508

原创 [Android] Input事件分发流程之InputReader(2)

继IMS构造方法分析完成后,看看IMS中的start方法以上只关注nativeStart(mPtr);,mPtr指向的就是NativeInputManager,之前初始化了InputManager->inputDispatcher&&inputReader,这里开始start它们,并且会创建InputThread线程,也就是InputReaderThread和InputDispatcherThread。

2023-10-03 12:54:59 222

原创 [Android] Input事件分发流程之IMS初始化(1)

当用户触摸屏幕或者按键操作,首次触发的是硬件驱动,驱动收到事件后,将该相应事件写入到输入设备节点, 这便产生了最原生态的内核事件。接着,输入系统取出原生态的事件,经过层层封装后成为KeyEvent或者MotionEvent;最后,交付给相应的目标窗口(Window)来消费该输入事件。

2023-10-03 12:54:11 217

原创 [Android] Window的添加过程

为空的时候,就会开始创建DecorView,然后开始解析activity,分为两部分,第一部分是title,第二部分是content,作为DecorView的内容,然后DecorView的content部分就是。属于一个单例模式,一个进程存在一个此对象,在WMI中的addView中会被调用,WMG中也有个addView,属于WMI中调用过来的,这里面的逻辑才是真正的处理view添加的逻辑,例如处理。属于一个接口类,实现了对view的更新,添加,移除,具体代码如下。WMI实现了WM接口,所以WMI调用了。

2023-10-03 12:52:45 367

原创 [Android] Inent启动参数分析

而这个flag代表没有浏览历时,若按返回键,或者不可见了就会立即销毁此活动,再次回到应用程序上,此Activity已经被销毁(弹出栈)了,再近期任务中也是没有记录的。**效果是一样的,不过如果Activity声明里这个代码,后续通过此Activity启动的其他活动,都带有这个flag的效果,也就是针对于Task栈生效的,这个栈里的所有Activity都有这个效果,如果切换到其他任务栈,则不会带有这个效果。特别像,都是将存在于任务栈中的活动,挪动到栈顶(前台),不会重新创建,而是复用,和。

2023-10-03 12:51:14 184

原创 【Android】Handler最细源码分析

在这个方法中,使用了@NonNull注解来标记返回的Message对象不为null,这样可以避免在使用返回的Message对象时出现NullPointerException。,也就是在创建Message的过程中就已经赋值了what的值,并且Message和handler提前关联了(tartget就是handler实例),因为。其实这方法里可以携带what参数,更为方便,其次是因为可以提前给Message赋值what,因为传递的数据都需要存放到Message中,上源码。去创建的Message,然后调用了。

2023-10-03 12:48:22 202

原创 AIDL(Android Interface Define Language)文件分析

AIDL文件分析

2023-07-26 23:15:54 670 1

原创 基于Android13的系统启动流程分析(六)之SystemServer内部逻辑分析

其实SystemServer是通过init fork出来的,父进程就是zygote,而zygote父进程就是init进程。SystemServer内部逻辑主要就是创建了核心服务,引导服务,其他服务,例如WMS,PMS,电池服务,蓝牙服务等。

2023-01-29 20:48:16 836 1

原创 基于Android13的系统启动流程分析(五)之Zygote和SystemServer启动流程

可以知道zygote是从rc中启动的,zygote本质上就是一个socket,不会关闭和销毁,而创建zygote时携带的StartSystemServer参数(必须携带此参数),会启动SystemServer子进程,SystemServer也是通过fork出来的,而底层和上层的交互是通过JNI实现的,SystemServer的启动是由zygoteInit通过反射的方式启动SystemServer的main方法。

2023-01-28 22:55:33 1035

原创 基于Android13的系统启动流程分析(四)之SecondStageMain阶段

android init启动流程,第二阶段启动流程,详细分析

2023-01-28 14:39:11 2473 1

原创 基于Android13的系统启动流程分析(三)之FirstStageMain阶段

init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init1. Bootloader 引导当按下设备电源键时,最先运行的就是 bootloader(固化在ROM的程序),bootloader 的主要作用就是硬件设备(如 CPU、flash、内存)的初始化并加载到RAM,通过建立内存空间映射,为装载 Linux 内核做好准备,。

2023-01-18 21:38:59 3751 4

原创 基于Android13的系统启动流程分析(一)之SeLinux权限介绍

SeLinux,SeAndroid,init进程启动

2023-01-11 00:14:11 4712 1

原创 基于Android Q的蓝牙通话无声问题

分享一下这几天改蓝牙通话无声的bug,文章有点长,希望各位看官看完能帮助到大家—今天分析的主题是蓝牙通话没有声音之运行流程分析一. 结果说在前面​ 蓝牙通话分别有七个阶段,基本上每个阶段都会走到底层,把数据回调到上层,这么一个流程叫一个阶段;回调的数据代表一个状态,而我这个问题就在于底层回调数据到上层时,携带的数据不满足上层的要求 导致无法进入下一个阶段而产生的蓝牙通话无声问题;​ 蓝牙通话的七个连接阶段使用的模式是:状态机模式,没弄明白状态机模式之前有点不好入手;我这里分享一下状态机模式的详解文

2021-07-19 15:00:00 2691 6

原创 基于Android Q的OTA包制作/签名(包含差分包)

先介绍一下关于OTA什么是OTA?空中下载技术(Over-the-Air Technology; OTA ),是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。经过公网多年的应用与发展,已十分成熟,网络运营商通过OTA技术实现SIM卡远程管理,还能提供移动化的新业务下载功能。简言之:手机系统更新包什么是OTA全包OTA全包指的是系统大版本更新,更新整个系统,通常OTA包的大小都是1G以上.什么是OTA差分包既然有全包 就有差分包,差分包指的是小版本更新

2021-07-19 14:49:58 1128 2

原创 基于Android Q电池服务分析

基于Android Q的电池服务分析之充电类型判断开局先说明一下我的需求和我遇到的难题问题插入充电没有提示音和图标更新插入充电没有任何反应和提示,但是确实是在充电需求在设置的电池中增加充电类型判断并显示在UI上1.造成问题的原因驱动online节点无法正常读取,导致上层数据为空,造成的bug涉及到的内容:1.BatteryService.java这里接收了health层发来的数据:充电广播,记录充电状态,低电量,电池高温,充电方式;发送充电广播产生充电提示音和更新充电图标2

2021-07-19 14:27:53 1157 1

原创 从源码角度分析Activity的启动流程

挥舞着指尖,谱写指尖的艺术前言阅读完本章你将收获Activity的启动流程AMS与客户端交互实现Activity启动过程Activity中的任务栈出入流程Application是何时 在哪创建的先执行attach()还是先执行onCreate()这里我们从Activity的启动流程开始分析,一路向西。冲冲冲!正题一. 如何启动(跳转)一个ActivityIntent intent = new Intent(this,要跳转的活动.class);startActivity(in.

2021-01-01 23:21:30 307 1

原创 Android岗的面试高频题(待补充)

Android开发岗高频题1.java中的作用域public:可以被所有其他类所访问private:只能被自己访问和修改protected:自身、子类及同一个包中类可以访问default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly。2.hashcode(),equals,==的区别如果两个对象equals相等,Java运行时环境会认为他们的hashcode一定相等。如果两个对象equals不相等,他们的hashcode有可能相等。如果两个对象hashcode相等

2020-12-18 18:33:56 229 1

原创 Android开发之手写Glide图片加载/缓存 框架

挥舞着指尖,谱写指尖的艺术声明这次的手写Glide图片缓存框架,并不是引入Glide三方,对其进行自定义配置;而是自己实现一个类似Glide图片加载框架Glide三方框架的特点Glide生命周期跟随Context生命周期-生而生-灭而灭;内部图片编码采用RGB_565;默认支持gif动画图片,还是很Nice;可以手动禁用/开启,内存缓存或者是磁盘缓存;支持网络地址加载、本地文件路径加载、URL加载等;内部采用LruCache内存缓存和弱引用,对内存还是很友好的;可以根据控件大小,G.

2020-12-12 01:30:13 465

原创 解决内存溢出(OOM)-Bitmap.Factory压缩图片那些事

挥舞着指尖,谱写指尖的艺术两种压缩图片的方式Bitmap.Factorybitmap.compress阅读完本文你的收获Bitmap.Factory是怎样进行图片缩小的;为什么bitmap.compress压缩图片了,还是造成了OOM;怎样去正确的选择一个适合自己的压缩方式;进入正题1. ComPress图片质量压缩我们在实际开发中,经常会用后台返回的url地址,进行图片的下载,或者说是调用相机拍摄照片时,图片都会异常的大,一张图片3M,4M,大量如此,OOM是在所.

2020-12-10 21:08:07 375

原创 Android中的View分发机制详解

又是打瞌睡的一天挥舞着指尖,谱写指尖的艺术由于自己的能力功底有限,就把我所理解的,所知道的记录下来;阅读完本章你将收获:View中的Click事件是在何时触发调用为什么Button和TextView所执行的View流程有异同如何完美的去解决滑动冲突view传递事件时是怎样的传递流程进入正题...

2020-12-07 15:59:58 352

原创 云服务器(云数据库)连接Mysql数据库【超详细-少踩雷】

云端服务器连接Mysql和sql server数据库一. 华为云服务器1.云服务器配置2.使用远程桌面连接二.安装配置MySQL可视化软件三.Android Studio代码片段所有代码,直接贴出来到这就完毕了一. 华为云服务器百度搜索华为云服务,免费领取一个月云服务器/云数据库。我们这里先用云服务器为例。1.云服务器配置具体步骤如下:选择Windows server 数据中心 64位...

2020-03-20 11:53:57 14471 3

SP_Flash_Tool_exe_Linux_v5.1912.00.100.zip

刷机/烧录 工具

2021-03-26

LGame-LGame-0.5-Beta-fix1.zip

LGame-LGame-0.5-Beta-fix1

2021-03-26

空空如也

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

TA关注的人

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