经验分享
文章平均质量分 92
普通网友
这个作者很懒,什么都没留下…
展开
-
鹅厂涨薪开启,其它大厂会跟风吗?
既然有涨薪了的,那也会有降薪的可能存在,只是顾虑着报喜不报忧的原则,具体的幅度就不说了吧,主要还是想和大家分析一下原因。随着经济的发展,不少公司进行了一轮又一轮的整改,整改的目的主要也是想找寻出真正适合该岗位的高效核心人才,减少没必要的一些损失。大多数的Android 开发者,基本都是做的业务层面的开发,每天就是写着简单的界面,然后再拿着别人的框架代码反复的去套用。当然,还有的鹅厂人则是领到了“毕业大礼包”,成为了社会人,几家欢喜几家忧。根据网友发的统计来看,调薪跨度还是比较大的(范围在1K~6K左右),原创 2023-08-22 15:06:33 · 112 阅读 · 0 评论 -
Android 性能优化篇之SharedPreferences使用优化
是Android本地存储的一种方式,是以的形式存储在里,的使用示例及源码解析参见:Android本地存储之SharedPreferences源码解析。以下是的一些结论:为什么还会出现呢?我们来看下的逻辑(这里源码是看的的):将加入到队列中,在执行时利用机制可以实现对当前线程的阻塞效果,后续的中会将这里的取出来执行,即会阻塞等待写入磁盘。写入操作是通过在构造的子线程中完成的,写入成功后会通过释放中的锁,使得线程恢复执行。、执行时,都会调用到方法:、都是间接在中的执行的,这两个方法里都会执行到:这里原创 2022-06-22 13:54:08 · 252 阅读 · 0 评论 -
如何在 Jetpack Compose 中调试重组
自从 Jetpack Compose 的第一个稳定版本上线以来,已经过去了好几个月 (译注:本文写于2022年4月)。多家公司已经使用了 Compose 来参与构建他们的 Android 应用程序,成千上万的 Android 工程师每天都在使用 Jetpack Compose 。虽然已经有大量的文档可以帮助开发人员接受这种新的编程模式,但仍有这么个概念让许多人摸不着头脑。它就是,Compose 赖以运作的基础。如果您不熟悉此主题,我将在本文中详细介绍 。对于大多数用例,除非传入的参数变了,否则我们不希望重新原创 2022-06-21 13:55:08 · 376 阅读 · 0 评论 -
抖音APP终极瘦身方案
随着项目版本的迭代,功能不断丰富,app的体积也愈来愈大,动辄几十MB甚至上百MB,用户看到这么大的体积,相信如果不是版本强制更新,绝大多数用户对版本更新都会敬而远之吧。毕竟更新一次版本的成本也太大了,不说流量不够用,假如网络不好,更新的时间成本也是不可小觑的,这对于体量不是很大的业务线来说是灾难性的,用户的可以选择的替代品太多了,如何能够在如此激烈的竞争环境中脱颖而出呢,降低包大小,让用户高高兴兴的去下载去更新,这也是我们app开发者需要去好好思索的。既然要优化包大小,首先要了解apk的组成部分。APK原创 2022-06-20 20:55:14 · 627 阅读 · 0 评论 -
Android开发应该知道的签名知识~
最近帮测试做了一点关于签名的需求,今天就和各位同学简单聊一聊关于签名的那些事儿。如果问到 Android 为什么需要签名?大家都可能想到官网的解释:这是一个比较模糊的解释,简单来说,有了签名,就可以让 App 和开发者绑定。毕竟,应用那么多,别的开发者也有可能盗用你的代码,这个时候,包名和你相同,代码和你相同,怎么区分你的 App 和这些人的 App 不是同一个呢?这个时候数字签名就派上用场了。想要彻底了解签名知识,我们得了解以下知识:这一系列的知识各位可能在学习网络的时候或多或少的接触过。我们简单的学习一原创 2022-06-20 14:58:40 · 143 阅读 · 0 评论 -
深入分析 Android 系统返回手势的实现原理
相较 iOS 早期便有的全局返回功能,Android 直到版本 10 才姗姗来迟。但 Google 给这个功能添加了视图、动画和角度展示,更是向用户开放了手势敏感度的设置入口。本文就这个系统功能一探其实现原理,了解之后:源码版本:目录前瞻:SystemUI App 的 在构造的时候通过 DI 创建 实例,其是整个返回手势的核心管理类。EdgeBackGestureHandler 类在构造的时候初始化一些手势判断需要的参数和变量。NavigationBarView 初次添加到 Window 上的时候会原创 2022-06-18 21:28:11 · 1785 阅读 · 0 评论 -
Android中消息总线的几种实现方式
消息总线又叫事件总线,为什么我们需要一个消息总线呢?是因为随着项目变大,页面变多,我们可能出现跨页面、跨组件、跨线程、跨进程传递消息与数据,为了更方便的直接通知到指定的页面实现具体的逻辑,我们需要消息总线来实现。从最基本的 BroadcastReceiver 到 EventBus 再到RxBus ,后来官方出了AndroidX jetpack 我们开始使用LiveDataBus,最后到Kotlin的流行出来了FlowBus。我们看看他们是怎么一步一步演变的。我们再初入 Android 的时候都应该学过广播接原创 2022-06-17 14:09:14 · 584 阅读 · 0 评论 -
看不懂Kotlin源码?从Contracts 函数说起~
最近有朋友反馈说因为源码是Kotlin,所以看不懂。其实,很多时候看不懂Kotlin的源码很有可能是因为你不知道某些特定语法。正如你看不懂源码其实是因为不了解设计模式一样~以Kotlin中常用的isNullOrEmpty方法为例,源码如下所示:咦?代码很简单,不过怎么看不懂呢?contract是什么鬼,implies 又是什么鬼? 其实当你了解contract函数的使用方法之后,类似的源码你就都能看懂了。Contracts是合同、契约的意思。从Kotlin1.3版本的时候就被引入了,简单的来说Contra原创 2022-06-16 13:49:38 · 170 阅读 · 0 评论 -
“终于懂了~” 系列:Zygote
在Android中,负责孵化新进程的这个进程叫做Zygote,安卓上其他的应用进程都是由它孵化的。众所周知,安卓是Linux内核,安卓系统上运行的一切程序都是放在Dalvik虚拟机上的,Zygote也不例外,事实上,它是安卓运行的第一个Dalvik虚拟机进程。既然Zygote负责孵化其他的安卓进程,那么它自己是由谁孵化的呢?既然Android是基于Linux内核,那么Zygote当然就是Linux内核启动的用户级进程Init创建的了。对于Zygote的作用实际上可以概括为以下两点:Zygote进程在Init原创 2022-06-15 21:36:08 · 242 阅读 · 0 评论 -
“终于懂了~” 系列:Lifecycle
Lifecycle生命周期感知型组件,用来执行、操作、响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。本文Lifecycle版本为2.2.0:implementation ‘androidx.lifecycler:lifecycle-common:2.2.0’ //22.2.23 更新 2.5 ,2.2是用的比较多的版本Lifecycle使用非常非常简单。默认你已经使用过Lifecycle。但如果我问你以下几个问题。你能回答出来几个?如果我是面试官,遇到简历上写掌握Jetp原创 2022-06-15 13:33:05 · 407 阅读 · 0 评论 -
一个Android沉浸式状态栏上的黑科技
说起来,在不知不觉中,我竟然凑成了这沉浸式状态栏三部曲。其实最开始的时候,我主要是因为工作上的原因想要在Android版的Edge浏览器上实现首页图片沉浸式的功能。那么为了实现这个功能,我提前去做了一些技术调研,并将调研的结果整理成了一篇文章,具体可参阅 再学一遍android:fitsSystemWindows属性 。做完技术调研之后,接下来就是功能实现了。对于Android版的Edge浏览器而言,首页图片的沉浸式一直是部分网友长久以来的呼声,经过我的各种攻坚和踩坑之后,终于将这个功能完成了。具体可参阅转载 2022-06-14 13:23:17 · 293 阅读 · 0 评论 -
Android 绘制原理浅析
对于Android开发,在面试的时候,经常会被问到,说一说View的绘制流程?我也经常问面试者,View的绘制流程.对于3年以上的开发人员来说,就知道onMeasure/onLayout/onDraw基本,知道他们呢是干些什么的,这样就够了吗?如果你来我们公司,我是你的面试官,可能我会考察你这三年都干了什么,对于View你都知道些什么,会问一些更细节的问题,比如LinearLayout的onMeasure,onLayout过程?他们都是什么时候被发起的,执行顺序是什么?如果以上问题你都知道,可能你进来我们公原创 2022-06-13 13:20:01 · 503 阅读 · 0 评论 -
API处理Android安全距离
在Android屏幕的空间中,大部分的区域我们都是可以随意绘制,只有一部分区域是显示的固定内容:其中标题栏是可选的,除了Material风格的应用应用的并不多,页面内容就是android.R.id.content是Activity的主要内容。而我们主要需要讨论的就是 状态栏和导航栏,因为这两个区域在不同设备类型,不同的Android版本和不同的厂商下大小和效果是不同的,等等。这些差异无疑增加了我们做页面适配的复杂程度,也更容易出现兼容问题。在2017年下半年iPhone X的发布,引入了刘海屏设备,导致了原创 2022-06-11 21:02:02 · 1882 阅读 · 0 评论 -
如何从Android 应用深入到Framework?
路只有一条:Read the fcking source code。翻译过来读源码,不论是看书,看博客,你的最终目的只有一个「学会看源码」,而不是「学会源码」。关于如何阅读源码,这不是一个简单的问题,我有几点经验 给大家分享:看不懂的多读。上面已经说过了,没有人一学就会;特别是对于初学者,你刚看系统源码,肯定一头雾水;万事开头难,在你觉得艰深晦涩的时候,你就当在背课文;Android Framework的代码时遵循一定规范的,你在背了一篇课文之后,再去读别的课文,读到一半的时候就算你看不懂,很有可能你就会原创 2022-06-10 21:28:27 · 261 阅读 · 0 评论 -
Android 平台下的 Method Trace 实现解析
对于开发者来说,Android的Java 层 提供了两种开发者可直接调用的 Method Trace 的API,一是 android.os.Debug类中的 startMethodTracing相关API,第二个 是android.os.Trace 类中的beginSection相关AP。 这两者的区别是 Debug类只能监控 Java函数调用, 而Trace类底层是使用 atrace 实现,其追踪的函数会包含了应用及系统的Java 和Native函数,并且底层基于ftrace还可以追踪cpu的详细活动信息原创 2022-06-10 14:12:48 · 832 阅读 · 0 评论 -
Android 面试笔录(精心整理篇)
activity的几种启动模式是android中常考的知识点,一般会考察有哪几种启动模式,以及每种启动模式在什么场景下使用::这个是android默认的Activity启动模式,每启动一个Activity都会被实例化一个Activity,并且新创建的Activity在堆栈中会在栈顶。:如果当前要启动的Activity就是在栈顶的位置,那么此时就会复用该Activity,并且不会重走onCreate方法,会直接它的方法,如果不在栈顶,就跟一样的。如果当前activity已经在前台显示着,突然来了一条推送消息,原创 2022-06-09 21:48:44 · 237 阅读 · 0 评论 -
TextView文本大小自动适配与TextView边距的去除
标题太难取了,其实本文主要就是讲如何控制文本大小,让其自动适配宽度,其次我们还需要精准控制Text的高度和宽度间距等属性。一般我们的布局都是分 match parent 和 wrap content 而他们的自动方式又有所不同。下面看看都有哪些方式来实现!官方推出的TextView的Autosizing方式,在宽度固定的情况下,可以设置最大文本Size和最小文本Size和每次缩放粒度,非常方便的就能实现该功能。autoSizeTextType:设置 TextView 是否支持自动改变文本大小,none原创 2022-06-09 16:15:22 · 2796 阅读 · 0 评论 -
LiveData 与 StateFlow,我该用哪个?
LiveData 相信大家都非常熟悉了,但是由于协程与 Flow 的不断发展,之前所使用的技术也正在不断被替代,而 LiveData 的功能与 StateFlow 很相似,所以,很多人都在考虑使用 StateFlow 去替代 LiveData。这里,我们就分析下,LiveData 与 StateFlow 的优缺点,以及我们该如何抉择。关于 LiveData 与 StateFlow,网上说的最多的区别,其实就是「官方指导文档」中所讲解的这两点,这里我直接搬运过来:关于第一点,对于 LiveData 与 Sta原创 2022-06-09 14:58:41 · 909 阅读 · 0 评论