引言自 Android 5.0 版本,Android 带来了沉浸式系统 bar(状态栏和导航栏),Android 的视觉效果进一步提高,各大 app 厂商也在大多数场景上使用沉浸式效果。但由于 Android 碎片化比较严重,每个版本的系统 bar 效果可能会有所差异,导致开发者往往需要进行兼容适配。为了简化系统 bar 沉浸式的使用,以及统一机型、版本差异所造成的效果差异,本文将介绍系统 bar
2022-12-26 michael007js 638
/前言/我收回标题上的话,从0手撸一个框架一点也不轻松,需要考虑的地方比较多,一些实现和细节值得商榷,对我这种菜鸡也是一个比较大的挑战,有不足的地方欢迎大佬们提供意见,最后标题是某个大佬常用的风格,我看到等于是我的,没错。/依赖任务加载/平时我们常常会使用各种第三方框架,如mmkv、glide、leakcanary等优秀的第三方库,大多数第三方库需要初始化后才能使用,因此会出现下面的代码:priv
2022-12-26 michael007js 63
Android单元测试介绍处于高速迭代开发中的Android项目往往需要除黑盒测试外更加可靠的质量保障,这正是单元测试的用武之地。单元测试周期性对项目进行函数级别的测试,在良好的覆盖率下,能够持续维护代码逻辑,从而支持项目从容应对快速的版本更新。单元测试是参与项目开发的工程师在项目代码之外建立的白盒测试工程,用于执行项目中的目标函数并验证其状态或者结果,其中,单元指的是测试的最小模块,通常指函数。
2022-12-26 michael007js 127
/JNI定义/JNI全称:Java Native Interface。它是Java本身的一种特性,用来在Java里面调用C/C++代码的。看下面的一个程序:public static void main(String[] args) throws Exception { PrintStream ps = new PrintStream(new FileOutputStream("wor
2022-12-26 michael007js 84
前言评价一个App是不是一款出色的应用, 第一印象很重要.这就要求我们必须把App的启动速度的优先级排的很高, 设想一个场景, 点击了App图标, 3秒过去了, 依然还卡在启动状态.这是令用户难以接受的事.要想解决问题, 首先要对问题有个全面的认识.下面我们就App启动流程及启动优化实操层面, 做一个抛砖引玉的探讨, 如有错误, 请评论区指正, 先行谢过了:)1. iOS启动流程分析App的启动可
2022-12-20 michael007js 710
ViewPager2是在RecyclerView的基础上构建而成的,意味着其可以复用RecyclerView对象的绝大部分特性,比如缓存复用机制等。作为ViewPager2系列的第一篇,本篇的主要目的是快速普及必要的前置知识,而内容的核心,正是前面所提到的RecyclerView的缓存复用机制。RecyclerView,顾名思义,它会回收其列表项视图以供重用。具体而言,当一个列表项被移出屏幕后,R
2022-12-20 michael007js 81
前言在我的上一篇*为什么Google要将LiveData设计成粘性的*文章中,有一位爱思考的小伙伴留下了这么一个评论。在看到这个评论后,我产生了两个疑问?LiveData的观察者对象必须得处于主线程中吗?究竟是什么原因让Google这么设计,正是这位小伙伴所述的原因吗?由此有了这篇文章,再次感谢这位小伙伴的留言探讨。观察者对象必须得处于主线程中吗?先说答案:是的,LiveData的观察者对象必须处
2022-12-20 michael007js 161
前言作为一名Android开发者,如果你熟悉MVVM架构,熟悉Jetpack组件,那么相信你肯定使用过ViewModel。正如它的名字一样,它是Google推出的一个类,方便我们实现MVVM架构中的ViewModel层。我们在其中处理View层所需的数据,然后在特定条件下通知View层进行UI更新。正如官方所介绍:ViewModel 类以注重生命周期的方式存储和管理界面相关的数据。ViewMode
2022-12-20 michael007js 133