自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 kotlin 协程

a、协程日异步逻辑同步化,杜绝回调地狱b、协程最核心的点就是,函数或者一段程序能够被挂起,稍后再在挂起的位置恢复协程的其他说法:1、协程就是线程框架,非阻塞式的挂起2、有点像轻量级的线程。

2025-02-06 14:19:20 163

原创 记录一次内存负载过大的问题分析

内存负载会受到多个因素影响,如动画效果等旧版本的内存情况:新版本的内存情况。

2025-01-18 17:07:42 208

原创 通Perfetto解析trace日志,分析启动速度慢的问题

首先打开trace的文件,然后标记对应的应用,以及launch应用,以及启动应用的动画animator可以看到如下:分析如下:1.第一个是启动的应用usb,第二个是usb的运行情况,第三行数是usb启动的动画,第四行是launcher的启动动画,后面就是launcher的点击运行的主线程。2、我们可以根据动画效果可以看到一开始是launcher的启动动画,然后是usb的启动动画显示。

2025-01-04 15:32:12 734

原创 【Android 内存优化】Android Profiler 工具常用功能 (内存泄漏查看)

Memory Profiler 是 Android Profiler 中的一个组件,它可以帮助你识别内存泄漏和内存溢出,从而导致存根、冻结甚至应用程序崩溃。它显示了应用程序内存使用的实时图,让你捕获堆转储、强制垃圾收集。

2024-09-12 18:30:16 2191

原创 【Android】ANR日志分析

很多开发者认为,ANR就是耗时操作导致,全部是app应用层的问题。实际上,线上环境大部分ANR由系统原因导致。

2024-03-06 17:57:56 3144 1

原创 framework开发:Android系统内置app

2.在build/make/target/product/core.mk加入该Module名字。1.在package/apps/目录下创建相应的文件夹如:MyApp。将一个打包好的apk,内置进入系统,并且不能卸载。3.再进行整体的make既可以。

2023-08-14 15:45:36 379

原创 framework开发:开机动画使用zip方式

2、将制作的bootanimation.zip拷贝到…\frameworks\base\cmds\bootanimation目录下。命令:zip -r -X -Z store bootanimation part*/* desc.txt。3、在Android.mk下。

2023-08-14 15:41:25 197

原创 framework开发:开机动画流程—使用opengl绘制开机动画

【代码】framework开发:开机动画流程—使用opengl绘制开机动画。

2023-08-14 15:34:16 257

原创 framework开发:开机动画流程2—动画绘制

创建出来的SurfaceControl对象的成员变量mSurface就指向了从SurfaceFlinger返回来的类型为SurfaceLayer的Binder代理对象。这个Surface对象s内部也有一个类型为SurfaceLayer的Binder代理对象mSurface,这个Binder代理对象与前面所创建的SurfaceControl对象control的内部的Binder代理对象mSurface引用的是同一个SurfaceLayer对象。Surface类继承了ANativeWindow类。

2023-08-14 15:31:07 193

原创 framework开发:开机动画流程1—bootanimation启动

内核起来后会启动第一个进程,即init进程。2、surfaceflinger进程便启动了,跟着就会跑进程的main()函数。frameworks/native/services/surfaceflinger/main_surfaceflinger.cpp首先new一个SurfaceFlinger实例,然后init,然后runframeworks/native/services/surfaceflinger/SurfaceFlinger.cpp4、StartPropertySetThread运行

2023-08-14 14:57:38 364

原创 Framework开发注意事项

framework-res.apk:android系统资源库framework.jar:android的sdk中核心代码services.jar:框架层服务端的编译后jar包。

2023-08-07 22:21:06 164

原创 线程原理-java

1、corePoolSize(线程池基本大小):当向线程池提交一个任务时,若线程池已创建的线程数小于corePoolSize,即便此时存在空闲线程,也会通过创建一个新线程来执行该任务,直到已创建的线程数大于或等于corePoolSize时,(除了利用提交新任务来创建和启动线程(按需构造),也可以通过 prestartCoreThread() 或 prestartAllCoreThreads() 方法来提前启动线程池中的基本线程。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。

2023-08-01 08:05:38 334

原创 Android- 启动模式

2023-08-01 08:03:21 539

原创 bind源码解析

ServiceManage负责管理所有的ServiceManager服务,在APP启动的时候,会调用电量,媒体等多个服务,都是通过binder来进行调用的,所有的服务端和客户端通信都是通过ServiceManager来注册和获取服务的。我们自动生成的aidl和系统的服务是一一对应的。1、客户端如何获取到AIDL的?

2023-08-01 08:03:05 614

原创 Android-Service -- 保活方案

3.ON_AFTER_RELEASE:如果释放WakeLock的时候屏幕处于亮着的状态,则在释放WakeLock之后让屏幕再保持亮一小会。3.ON_AFTER_RELEASE:如果释放WakeLock的时候屏幕处于亮着的状态,则在释放WakeLock之后让屏幕再保持亮一小会。在发送特定系统事件时,系统会发出广播,通过在AndroidManifest中静态注册对应的广播监听,即可在发送响应事件时拉活。1、前台进程:当前运行的进程,除非APP的内存超过系统给定的最大内存,导致OOM才会被杀掉。

2023-08-01 08:02:53 2433

原创 setContentView 流程

PhoneWindow.setContentView — 主要目的 创建 DecorView 拿到 Content// 创建 DecorView 拿到 mContentParenta、先获取对应属性的设置// R.layout.screen_simple --》 添加到 DecorView(FrameLayout)// R.layout.activity_main 渲染到 mContentParent。

2023-08-01 08:02:40 98

原创 Android-APP启动流程

组件状态管理:包括四大组件的开启,关闭等一系列操作。如startActivity,startActivityAndWait,activityPaused,startService,stopService,removeContentProvider等组件状态查询:查询组件当前运行等情况。如getCallingActivity,getService等Task相关:包括removeTask,removeSubTask,moveTaskBackwards,moveTaskToFront等。

2023-08-01 08:02:21 635

原创 Jetpack -LiveData和dataBinding

LivaData通过observe()添加与LifecycleOwner绑定的观察者;在considerNotify()先用2个if判断出被观察者对应的activity状态是否为显示发送通知onChanged()被调用;使用setValue()、postValue()更新数据时会通知回调所有的观察者。反射问题解决: 享学课堂/Jetpack技术之-数据绑定与ViewModel。

2023-08-01 08:02:00 63

原创 Android Okhttp源码和retofit

好了,最后补上这个拦截器networkInterceptors,它也是一个自定义拦截器,位于CallServerInterceptor之前,属于倒数第二个拦截器。那为什么OkHttp在有了一个自定义拦截器的前提下又提供了一个拦截器呢?可以发现,这个拦截器的位置是比较深的位置,处在发送数据的前一刻,以及收到数据的第一刻。这么敏感的位置,决定了通过这个拦截器可以看到更多的信息,比如:请求之前,OkHttp处理之后的请求报文数据,比如增加了各种header之后的数据。

2023-08-01 08:00:55 104

原创 网络基础 - 协议概念

3、C类地址:网络id:前两位固定为110,第一部分是192~223,第二、三部分是 0~255 ,一二三部分为网络id,四部分为主机id,最大主机数是254个。2、B类地址:网络id:前两位固定为10,第一部分是128~191,第二部分是 0~255 一二部分为网络id,三四部分为主机id。默认情况下,A类子网掩码的位数是8,B类是16位,C类是24为。乘法减少:只要网络出现拥塞,把ssthresh减半,于此同时,执行慢开始算法(cwnd又恢复到初始值)

2023-08-01 08:00:38 110

原创 C语言和C++学习笔记

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNwnPFKX-1690813594915)(https://note.youdao.com/yws/res/3344/WEBRESOURCE70978b000481820b5014a2e91403619b)]// malloc/free是一套 不调用构造函数 与 析构函数 【C的范畴,虽然不推荐,但是也是可以的】1、浅拷贝,每次拷贝会生成新的地址,但新旧地址都指向同一个内存空间,所以释放时如果重复执行就会报错。

2023-08-01 07:59:54 62

原创 Android - hangdle框架

线程本地存储区(Thread Local Storage,简称为TLS),每个线程都有自己的私有的本地存储区域,不同线程之间彼此不能访问对方的TLS区域。在message初始化时就会创建一个looper,looper初始化会执行和创建epoll的一些函数,然后进行监听fd的方式来形成阻塞。next: 先判断是否有消息屏障,有就执行异步消息,然后则执行正常的消息队列,最后当消息队列没有消息,并且空闲时,就回执行会执行ideleHandler。此时我们对这些流的操作都是(复杂度降低到了O(1))有意义的。

2023-07-31 17:50:13 97

空空如也

空空如也

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

TA关注的人

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