当前位置:网站首页>高级UI都没弄明白凭什么拿高薪,劲爆
高级UI都没弄明白凭什么拿高薪,劲爆
2022-04-22 02:01:00 【mb6260162caa201】
“2020年技术没有成长,我今年一定要好好努力学习!”
“在现在这个公司都工作了3年了,一毛钱工资都没有涨…”
“年前真倒霉,老板嫌我工资高,被优化了,年后又遇到了疫情,现在都还没有找到合适的工作。”
“想一边工作,一边找工作,但是,哎,要么简历石沉大海,要么,问几个问题就结束了…”
“刚找到一个工作,这工资比我现在的也高不了多少,去还是不去呢?”
“工作这么多年了,感觉技术就是这样子,这几年时间白白浪费了”
“越想越觉得自己的干这个技术没有出路,我该怎么办啊,换行业吗,还是继续干,不干我又能干什么呢?”
经常能听到一些Android同僚发出这样的言论,很多人都对自己的职业和未来感觉迷茫,想要学习提升自己,但是又不知道该如何去学习,或者沉不下心来学习。

既然选择了Android,就注定要不断学习新技术,没技术、没能力还不学习,被淘汰的时候确实怨不得别人,要是因此抹黑Android 说Android凉了那可就更过分了。
启动模式
要准确的测量APP的启动时间,首先我们要了解APP整个启动过程。 启动过程,一般可以分为以下三类:

爱奇艺Android客户端启动优化与分析
从上图可以看出,启动过程中,Cold的模式下,生命周期中做的事情最多,启动的时间最长,因此,我们以冷启动来衡量APP启动时间。启动过程中,如何判断哪些生命周期影响启动速度呢?
启动过程
我们知道,APP的启动和运行,就是Linux系统创建进程和组件对象,并在UI线程中处理组件消息的过程。
启动过程图:

App的启动过程,可以划分为三个阶段:
3.1 创建进程
当APP启动时,如果当前app的进程不存在,便会创建新的进程;App主进程启动后,如果启动某个组件,并且该组件设置了android:process属性,组件所运行的进程不存在,也会创建新的进程。
需要注意的是,如果在启动阶段,初始化的组件中,包含了多个进程,便会创建多次进程,BindApplication操作也会重复执行多次
3.2 创建UI线程及Handler
进程创建后,会通过反射,执行ActivityThread入口函数,创建Handler,并在当前线程中prepareMainLooper,并在Handler中接收组件的消息,我们来看一下Handler中处理的消息:
- LAUNCH_ACTIVITY,启动,执行Activity
- RESUME_ACTIVITY,恢复Activity
- BIND_APPLICATION,启动app
- BIND_SERVICE,Service创建, onBind
- LOW_MEMORY,内存不足,回收后台程序
sMainThreadHandler中,处理的消息很多,这里只罗列了,可能在启动阶段可能会执行的操作, 这些操作都是运行在Main Thread中,对启动而言,属于阻塞性的。
Activity生命周期,自然需要在启动阶段执行,但,对于Service的创建,Trim_memory回调,广播接收等操作,就需要重点考虑,其操作耗时性。
3.3 Activity运行及绘制
前两个过程,创建进程和UI线程及Handler,都是由系统决定的,对APP开发者而言,并不能控制其执行时间,在本阶段,执行BindApplication,和Acitivity生命周期,都是可以由开发者自定义。
Activity执行到onResume之后,会执行至ViewRootImpl,执行两次performTraversals,第二次traversal操作中,会执行performDraw操作,同时通知RenderThread线程执行绘制.
从启动的三个阶段,我们可以看出,启动启动时间的长短,决定因素在于,主线程中所做事情消耗的时间的多少,所以,我们的优化工作主要集中在,排查主线程中耗时性的工作,并进行合理的优化。Android手机,系统的资源是有限的,过多的异步线程,会抢占CPU,导致主线程执行时间片间隔增大。同样的,内存消耗状态,GC频率,也会影响启动的时间
最后
想要了解更多关于大厂面试的同学可以** 点击这里免费获取《面试文档》**除此之外,我也分享一些免费的优质资源,包括:Android学习PDF+架构视频+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容。分享给大家,非常适合近期有面试和想在技术道路上继续精进的朋友。快来获取学习资料吧~
版权声明
本文为[mb6260162caa201]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15609400/5241085
边栏推荐
- Thief, the latest Android interview collection
- HJ6 质数因子
- [programming question] clear random number
- Hemisphere - lynx target penetration test
- Unity3d RPG role playing game source code (top and bottom) --- source code analysis ----- 01 ------ protagonist character animation
- 树、二叉树和森林的转换
- Net Easy
- Swoole high performance in memory database use and configuration tutorial
- Jetcode prize essay solicitation activity | interesting stories of low code industry waiting for you to share
- Android four components interview
猜你喜欢

Introduction to Matlab (I)

Point cloud segmentation task notes
![[acwing] week 8](/img/80/424ed65cc45f7b6a9003d1ecf7db18.png)
[acwing] week 8

Unity3d RPG role playing game source code (top and bottom) --- source code analysis ----- 01 ------ protagonist character animation

Transformation of trees, binary trees and forests

树、二叉树和森林的转换

Advanced formula 43 of C language: the meaning of function

Method for extracting middle layer output of CNN model

Leetcode 141, circular linked list

Leetcode 21. Merge two ordered linked lists
随机推荐
Common evaluation indexes of medical image segmentation
Redis 缓存数据库使用 Redis-Shake 做数据同步
Precise timing, GPS Beidou satellite timing synchronization clock system ceiling
Hj6 prime factor
Leetcode 733, image rendering
【DFS】【剪枝】小猫爬山
树、二叉树和森林的转换
[programming question] character set
[programming question] what is the highest score
Bsides-vancouver-2018-workshop target penetration test
Oracle cannot see the view in the view object, but the view data can be queried with the select statement
[编程题]字符集合
php. ini Module ‘redis‘ already loaded in Unknown on line 0
JVM - GC garbage collector
Time and current time judgment in MySQL database
Leetcode 3. Longest substring without repeated characters
精准授时,GPS北斗卫星授时同步时钟系统的天花板
HJ6 质数因子
Advanced file IO of system programming (12) -- blocking and non blocking reading
Hj5 binary conversion