- 博客(47)
- 收藏
- 关注
原创 【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2
这3个生命周期的执行的连续的,onStart 原来这个场景下不是通过事务执行的知道了 Activity 生命周期事务跨进程处理方式DecorView 的可见性是在 onStart 设置的执行 onResume 的时候会触发窗口的添加显示,从严格意义上说,执行 onResume 的时候并不意味着手机屏幕上就有UI数据了。(但是不那么严谨思考的话,正常情况下,onResume 执行了差不多窗口也就显示了)
2024-10-01 21:22:45 1345
原创 【Android 源码分析】Activity生命周期之onDestroy
ActivityThread::performDestroyActivity -- onDestroy流程WindowManagerImpl::removeViewImmediate -- UI处理ActivityClient::activityDestroyed -- SystemService 进程处理。
2024-10-01 21:22:21 1218
原创 【Android 源码分析】Activity生命周期之onStop-2
当前只是以桌面冷启动应用的场景来分析桌面的 onStop 流程,整个流程分析完对 onStop 流程也有了一个比较完整的了解,但是当前分析的调用流程并不能代表所有场景。具体情况还是需要具体分析,比如应用内启动 Activity 的调用链肯定和当前是有别的,但是无论怎么样,2个主流程还是要执行的。
2024-10-01 21:21:47 996
原创 【Android 源码分析】Activity生命周期之onStop-1
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。– 服装学院的IT男本篇已收录于欢迎一起学习讨论Android应用开发或者WMSV:WJB6995。
2024-10-01 21:21:29 1686
原创 【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-1
我们知道 onCreate 这个生命周期表示 Activity 的创建,对应 LaunchActivityItem 这个事务,源码中构建这个事务唯一的地方就在 ActivityTaskSupervisor::realStartActivityLocked 方法。TargetActivity 所在的应用进程已经启动SourceActivity 需要执行 onPause。
2024-10-01 21:21:12 1082
原创 【Android 源码分析】Activity生命周期之onPause
Activity 生命周期是学习 Android 必定要掌握的知识点,但是刚入行的同学对于这个概念基本上是靠死记硬背,有一些实际工作经验的同学,在工作中通过实现业务需求或者解决一些BUG基本上是可以知道哪些生命周期对应用户操作的哪一步。虽然触发生命周期的场景很多,当前只还是以在桌面启动应用来分析,但是完整的跟过这一流程的代码逻辑,就能加深对生命周期本质的理解,其他场景的生命周期切换也不是啥问题。系列如下Activity生命周期之onPauseonCreate,onStart,onResume-1onCrea
2024-10-01 21:20:48 1353
原创 【Android 13源码分析】窗口的移除(removeWindow)
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。– 服装学院的IT男本篇已收录于欢迎一起学习讨论Android应用开发或者WMSV:WJB6995。
2024-09-30 15:50:50 1090
原创 【Android 14源码分析】WMS-窗口显示-第一步:addWindow
本篇开始真正看 addWindow 流程,首先从结果上对比下应用启动后窗口的区别来确认本篇的目的:Task其中 Task 和 ActivityRecord 是如何挂载上去的在【Activity启动流程】已经介绍了,当前要分析的 addWindow 流程最重要的目标就是分析窗口对应的 WindowState 是如何创建并且挂载到窗口树中的。也就是这一变化:应用端 Activity 执行到 onResume 说明 Activity 已经可见,下面就需要处理可见的内容。
2024-09-30 15:43:07 1040
原创 【Android 14源码分析】WMS-窗口显示-第三步:finishDrawingWindow
目前窗口的显示到了最后一步。在 addWindow 流程中,创建挂载了 WindowState在 relayoutWindow 流程为这个窗口创建了 Surface 并且还计算好了这个窗口的大小和在屏幕上的位置,并把窗口的 Surface 状态设置为了 DRAW_PENDING。这一步执行完后,应用端就可以开始绘制 View 树了,绘制完成后,需要把内容显示到屏幕上,也就是现在这个 Surface ,这一步就是本篇分析的内容:finishDrawingWindow 流程。
2024-09-30 15:38:36 717
原创 【Android 14源码分析】WMS-窗口显示-第二步:relayoutWindow -2
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。– 服装学院的IT男本篇已收录于欢迎一起学习讨论Android应用开发或者WMSV:WJB6995。
2024-09-30 15:38:19 929
原创 【Android 14源码分析】WMS-窗口显示-第二步:relayoutWindow -1
回顾下窗口显示的三个流程:addWindow流程为应用端创建对应的 WindowState 并挂载relayoutWindow流程addWindow 流程后执行后,屏幕上就有新的 WindowState 添加了,WMS 也需要对屏幕上所有的窗口执行一遍 layout 来确定各个窗口所在的位置。而应用端想要绘制 UI 数据,则也需要知道自己的窗口大小,位置信息,并且还需要一个 Surface 来承载 UI 数据。为窗口申请 Surface 并返回给应用端计算返窗口的大小,位置信息并返回给应用端。
2024-09-30 15:38:04 957
原创 【Android 14源码分析】WMS-窗口显示-流程概览与应用端流程分析
WMS 负责管理设备上所有的 Window ,所以应用想显示一个 Window 则要通过 WMS 来完成。而 WMS 毕竟还是上层,窗口的内容要显示到屏幕上,还需要 SurfaceFlinger 来处理。应用端: 控制其内部的窗口的添加及 UI 绘制逻辑WMS 模块: 作为系统窗口管理模块,处理应用端的窗口显示逻辑应用端与 WMS 通信通过匿名 Binder -> Session 完成。
2024-09-30 15:37:45 1139
原创 【Android 14源码分析】Activity启动流程-1
执行 startActivity 方法的 Activity ,也就是发起请求的Activity ,当前是 Launcher 的 Activity。:被启动的 Activity 当前就是“电话”应用在清单文件配置的MainActivityAMS: 不仅仅是指 AMS 这一个类,而是指在这个过程中 system_service 进程参与处理的相关类。
2024-09-29 19:41:27 1478
原创 【Android 14源码分析】Activity启动流程-3
阶段三的流程相对来逻辑简单一些,知道个调用链就好,流程目的就是执行 ActivityTaskSupervisor::realStartActivityLocked。这部分的堆栈如下图:ActivityManagerService::attachApplication -- 跨进程RootWindowContainer$AttachApplicationHelper::process -- 开始遍历。
2024-09-29 19:41:10 992
原创 【Android 14源码分析】Activity启动流程-2
在 Launcher 进程构建了启动参数放在了 ActivityOption 中,然后通过 Bundle 传递给 system_service 端AMS 先解析参数,放在了 Request 这个类中保存AMS 构建出一个 ActivityRecord ,这个类在 system_service 端就代表着 Activity ,同时也是一个窗口容器再构建出一个 Task 挂载到窗口树上。
2024-09-29 19:40:51 1465
原创 【Android 13源码分析】WindowContainer窗口层级-4-Layer树
在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。对这一块的概念以及相关源码做了详细分析,整理出以下几篇。本篇为第四篇,前面三篇已经将Android窗口树介绍完了,但是我们知道安卓真正控制显示的是在SurfaceFlinger层,难道说SurfaceFlinger层也有这么一个窗口树吗?如果有,Framework层构建窗口树的代码这么复杂,难道SurfaceFlinger也有这么一段复杂的逻辑吗?
2024-09-15 13:15:03 1303
原创 【Android 13源码分析】WindowContainer窗口层级-3-实例分析
在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。对这一块的概念以及相关源码做了详细分析,整理出以下几篇。当前为第三篇,以应用窗口和系统窗口2大类型窗口的挂载为例介绍窗口是如何挂载到层级树中的。这篇看完对AOSP中整个窗口树就有了比较完整的了解。
2024-09-15 13:14:36 1245
原创 【Android 13源码分析】WindowContainer窗口层级-2-构建流程
拥有特征的层级: 0-31特征描述: 支持窗口缩放的一块区域,一般是通过辅助服务进行缩小或放大拥有特征的层级: 0-14 16 18-23 26-35特征描述:隐藏剪切区域,即在默认显示设备上隐藏不规则形状的屏幕区域,比如在代码中打开这个功能后,有这个功能的图层就不会延伸到刘海屏区域。OneHanded拥有特征的层级:0-23 26-32 34-35特征描述:表示支持单手操作的图层,这个功能在手机上还是挺常见的。
2024-09-15 13:14:10 834
原创 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树
下面2个图来自Unity3d官网开发文档:们玩的王者荣耀,原神等游戏的开发,都是类似在这么一个3D场景下进行的,开发者将使用3D建模工具来创建地形、建筑、植被等地图元素,并通过材质和贴图来增强地图的视觉效果。比如这张图片里放了3个颜色的柱子。除了这些物体外,可以看到还有一个摄像机(Camera),它是用来捕捉画面的, 毕竟手机屏幕是2D的,简单来说这个摄像机能捕捉到的画面就是我们手机屏幕上显示的内容,比如这张图片捕捉到的画面是右下角的内容。
2024-09-15 13:13:04 1010
原创 Android工作经验五年总结(零基础自学Android)
我经常会提到看书看书,不过对于初学者来说,看书是入门,自己敲代码才是最重要的。看书的原因是因为很多东西你会无从下手,不知道要学什么,怎么学,这个时候看书会少走很多弯路,但是看书只是一个方式,最重要的还是代码量要上去。然后这次再推荐一本书《认知觉醒》在微信读书就可以免费看,还挺好的。如果你很迷茫,心态很不好,我认为这本书非常值得看,我自己看2遍了。虽然现在大环境很差,不知道你在遭遇什么,但是一切都会好起来的。共勉。
2023-08-25 16:48:42 192 1
原创 Android工作经验4.5年总结。(零基础自学Android)
明天要入职了,希望失业或者找工作的同学们能早日上岸,对于一些喜欢Android却不知道怎么去学的同学,也欢迎加我联系方式(Android工作经验一年总结里有),如果我能帮助你的话,也是我的荣幸。对于知道自己很懒,不想努力又想要高薪,喜欢抱怨社会不公的同学,你可以在评论区骂我一顿,就不要加我了。如果有什么私活,赚钱的小路子,或者更好的岗位也可以联系我。愿你的代码没有Bug。
2022-10-25 16:41:21 1011 4
原创 Android工作经验三年总结。(零基础自学Android)
开篇两年前写过一篇 Android工作经验一年总结 之后还是不少的小伙伴加到了我的QQ分享经验,现在基本上都找到了比较满意的工作踏上了脱发之路。大概又20几个吧,都是经历和我差不多,也是愿意是吃过和学习的,只有一个是想着啥也不干就能学会很多东西的,我也是很快的拒绝了与其沟通。你的薪资多少取决于你脑子里有多少东西,脑子里的东西是需要自己思考和学习的。三年后的我毕业三年了,离上一篇记录文章也过去两年了,现在的我与之前有和区别:待遇,2020年是不容易的一年,疫情之下,发生了太多,经过了一些毕生难忘的
2021-05-17 22:14:21 828 1
原创 自定义水平颜色选择器seekbar,根据进度返回颜色,根据颜色返回进度(待完善)
import android.animation.ArgbEvaluatorimport android.content.Contextimport android.graphics.*import android.util.AttributeSetimport android.util.Logimport android.util.TypedValueimport android....
2019-04-26 13:59:33 942
原创 Android工作经验一年总结。(零基础自学Android)
自我介绍一个普通的人吧。没那么聪明,贪玩,野鸡大学毕业,喜欢看漂亮妹子,喜欢打游戏,家境一般,乡下孩子。138,183,95年。就一个很普通的孩子,不是那种高中就接触编程,大学毕业就各种系统内核,了如指掌的。当然现在的水平,也就是1年经验的,面向百度编程的水平。我会什么1,android客户端 会到啥水平。也就1年的水平吧。从一开始的碰到RecycleView的需求都手忙脚乱。到现在不管产...
2019-04-26 13:53:11 4597 10
原创 Android开发艺术探索阅读笔记(持续完善更新中......)
Android开发艺术探索阅读笔记(持续完善更新中......)1.Activity的生命周期和启动模式1.1 启动模式1.2 intent-filter的匹配规则2.IPC机制2.1 Android的多进程模式2.2 Binder2.3 Android的IPC方式2.3.1 Bundle2.3.2 文件共享2.3.3 Messenger2.3.4 AIDL2.3.5 ContentProvide...
2019-02-20 19:33:29 2017
原创 addView控制层级源码解析
addView 有多个构造方法,其中addView(View child, int index, LayoutParams params)第二个参数可以控制需要添加到的层级。其他没有index参数的方法,其实还是会执行这个带有index参数的方法,只不过默认为-1。比如@Overridepublic void addView(View child, LayoutParams pa...
2018-12-26 19:50:54 572
原创 Android监听其他应用屏幕旋转
如果你是搜这个标题进来的,其实你和我一样走进了误区,一开始觉得监听自己的应用屏幕旋转很简单,怎么监听别人的呢?其实都是一个道理。设备旋转了,手机上所有的应用都接受的是同一个通知。那我们自己应用能接受到,当然也能接收到其他应用屏幕旋转的信息喽。很简单。第一步,先写个广播接收者。 override fun onReceive(context: Context, intent: Inte...
2018-10-12 10:17:59 964
原创 android客户端ORC图片识别库tess_two的使用
先导库implementation 'com.rmtheis:tess-two:9.0.0'9.0.0是目前最新的,https://github.com/rmtheis/tess-two可以去这个地方查看最新地址。既然是图片识别,那一想就可知,需要传入一个图片bitmap,那么返回的肯定是图片中的内容String。TessBaseAPI tessBaseAPI = new Tes...
2018-09-12 15:22:38 3432 1
翻译 由Fragment管理的布局用了NestedScrollView,内部有RecycleView刷新界面的时候,RecycleView直接顶到最前面,上面的布局全部覆盖。记录解决方法
解决方法:在NestedScrollView唯一子布局中加入 android:descendantFocusability=“blocksDescendants”android:descendantFocusability 有三个属性优先于子控件获取焦点“beforeDescendants"当子控件不需要焦点时,获取焦点”afterDescendants“覆盖所有子控件获取...
2018-09-10 14:44:06 969
原创 FaceBook,whatAPP,ins,等海外软件,传入包名分享图片
object PicShareUtils { val PACKAGE_NAME_FB = "com.facebook.katana" val PACKAGE_NAME_WHATSAPP = "com.whatsapp" val PACKAGE_NAME_INSTAGRAM = "com.instagram.android" private val SHARE_TY...
2018-09-07 09:25:43 984
原创 两个bitmap对象拼成一个返回的两种实现方式。记录
1.XML布局文件,拼接。 再将xml转换成bitmap返回/** * 生成分享自定义主题的bitmap图片 * content 对应一个自定义主题bitmap的路径 */fun createShareBitmap(context: Context, screenShot: String): Bitmap { val themeBitmap = BitmapFactory.d...
2018-09-05 11:36:46 318
原创 android 项目实用虚拟机Gradle命令打包,友盟多渠道打包,签名文件不同等。
实用虚拟机打包的签名文件地址是虚拟机的。这样就不会关联到你电脑上的其他项目了。如果一个项目被下架,也能保证其他项目的安全。 刚学完虚拟机Gradle命令打包。做个记录,以免忘的太快。一:下载虚拟机,安装好系统。 我用的是vm+w7二:设置好共享文件目录。 最好就是项目所在盘符 D盘F盘这种意思。三:安装好JDK 。然后把你本地的SDK,和你版本的Gradle文件都 复制到你...
2018-06-27 19:42:24 308
原创 Android面试补习(九)Activitythread和Applicationthread简单梳理以及Activity的启动
Activitythread和Applicationthread简单梳理Applicationthread是Activitythread和AMS通信的桥梁Activity的启动逻辑过程Applicationthread的ScheduleActivity通过一个叫H的Handler发送了一个启动Activity信息。handleLaunchActivity接收了这个消息,然后做处理,处理的逻辑是让P...
2018-06-03 15:40:23 2409
原创 程序忽然不能访问HTTP请求,查看LOG发现报错Expected ':status' header not present
程序忽然不能访问HTTP请求,查看LOG发现报错Expected ':status' header not present。慌的一批,毕业设计马上答辩,网络请求却出问题,直接复制URL在浏览器可以正确访问。研究一波后发现我的okhttp版本3.4 更新到最新的3.10.0就可以。compile 'com.squareup.okhttp3:okhttp:3.10.0'程序忽然不能访问HTTP请求,...
2018-04-28 16:51:14 3378
原创 Android面试补习(八)JAVA部分
作为实习生,我们准备面试往往忽略了一个至关重要的点:基础。 受社会压力影响,我们觉得岗位是越来越少,压力是越来越大,加上培训机构培养的代码搬运工越来越多,我们大学生需要竞争的对手越来越多。我们就会想着,提高自己的APP设计能力,多学学高级技术,什么开源框架啊,什么第三方SDK啊。当然,学的越深,对我肯定是有好处的,但是,别忘了我们大学生的优势,就在于基础。 公司招大...
2018-03-19 15:21:06 250
原创 大话数据结构阅读笔记(一)时间复杂度和空间
大学的数据结构,学的确实不怎么样,算法这一块,也有待提高,每次百度一些BAT笔试题,看到什么时间复杂度,空间复杂度都是一头雾水。最近找实习工作不是很顺利,需要实习生的公司本来就不多,很多公司看到学校咋样,就直接PASS你,不给你机会。不过没关系,一切都会好起来的。趁现在每天时间还算自由,多看看书,争取机会到来的时候一把抓住。开始正题。先来明确2个名词的概念:时间复杂度:书上对于时间复杂度的定义是这...
2018-03-15 19:42:19 672
原创 Android面试补习(七)谈一谈Android的消息机制Handler,跨进程通信IPC机制
这2个概念不仅是Androidd 机制,更是重点,我的目的是分享面试的Android方面的一些基础知识,所以一般情况我不会特别去深究原理,但是今天的概念非常重要,所以为了把握好文章的深度和正确性,我再次花了很久的时候去复习以前的概念,查阅资料。经过非常多的功课,才开始了我的分享。因为阅读的资料比较多,再加上自己的语言去表述,如有错误或侵权请指教。 Handler和IP...
2018-03-15 16:08:47 714
原创 Android面试补习(六)浅谈Android事件分发机制(对CSDN移动端的填坑意见反馈)
大家都知道,手机屏幕就那么大,但是要显示的界面却多之又多,那么作为一个成熟的APP最起码要理解用户的点击,滑动行为,到底是为了执行什么事件动作。比如现在很多的APP都是具有侧边栏+地步导航栏+viewpager这是很基础的界面。那么侧边栏一般都是右滑出现,但是不是每个界面右滑都需要出现,这就需要你做好事件的响应处理。再比如最近遇到的CSDN移动端的一个坑(其实觉得坑挺多的比如微信不能登录,经常不能...
2018-03-15 10:12:46 293
原创 Android面试补习(五)粗浅了解组件化,模块化,插件化热更新,增量更新,65536
其实这些东西,作为初学者,我们目前是接触不到的,但是要有一定的了解,我曾经花了很多的时候去研究,现在也记不得太多了,还是一些粗浅的概念方面的理解,但是这个概念,很重要。决定你的编程思维。接下来我只做简短的概念介绍,长篇大论度娘那里很多,我也是从度娘那学的,就没必要再搬出来了。65536Android最大支持方法数,解决方案在build.gradle下在android{}中的defaultConfi...
2018-03-15 08:46:59 645
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人