随笔博文

  • 每次调试打印日志都很头痛

    引子当代码的运行效果不符合预期时就得进行调试,排查下整个数据链路上到底是哪个环节出了问题。断点调试当然是首选,因为它可以单步执行程序,并查看当前执行步骤中所有的数据值。但有些场景下,断点调试就显得笨拙。比如大量异步并发的场景,当程序不是线性执行而是跳来跳去时,就会发生你期望下一步是执行到这里,断点调试却跳到了另一个线程,这样的复杂度,让正在执行的代码变得难以理解。除此之外,有些型号的手机,一断点调

    2022-12-13 michael007js 56

  • 全网最优雅安卓列表项可见性检测

    引子业务开发中列表项的曝光埋点做得越来越精细了。一开始,我是在 onBindView() 中上报列表项曝光的:// RecyclerView.Adapter.ktoverride fun onBindViewHolder(holder: ViewHolder, position: Int, payloads: MutableList<Any>) { ReportUtil.repo

    2022-12-13 michael007js 50

  • 全网最优雅安卓控件可见性检测

    引子view.setOnClickListener { // 当控件被点击时触发的逻辑 }正是因为 View 对控件点击采用了策略模式,才使得监听任何控件的点击事件变得易如反掌。我有一个愿望。。。如果 View 能有一个可见性监听该多好啊!view.setOnVisibilityChangeListener { isVisible: Boolean -> }系统并未提供这个方法。。。但业

    2022-12-13 michael007js 115

  • synchronized实现原理

    synchronized作为java语言中的并发关键词,其在代码中出现的频率相当高频,大多数开发者在涉及到并发场景时,一般都会下意识得选取synchronized。synchronized在代码中主要有三类用法,根据其用法不同,所获取的锁对象也不同,如下所示:修饰代码块:这种用法通常叫做同步代码块,获取的锁对象是在synchronized中显式指定的修饰实例方法:这种用法通常叫做同步方法,获取的锁

    2022-12-13 michael007js 42

  • Jetpack之—WorkManger

    简介Jetpack的文档库里面是这样介绍的:使用WorkManager API可以轻松地调度那些必须可靠运行的可延期异步任务。通过这些 API,您可以创建任务并提交给WorkManager,以便在满足工作约束条件时运行。WorkManger是Android Jetpack里面的一个重量级组件,它是一个提供异步执行任务的管理框架,会根据系统的版本和应用的状态来选择执行任务的时机。当应用在运行的时候会

    2022-12-12 michael007js 149

  • Jetpack之-Navigation

    虽说是重学Jetpack,但其实也不尽是,因为有些Jetpack组件之前也没学过。最早开始使用Jetpack组件开发是2019年,当时公司开发的一款产品采用的MVVM架构,其中使用的Jetpack组件包括Paging、LiveData、ViewModel以及Room等,后面到了现在的公司就一直没有怎么使用过。但Jetpack组件作为谷歌的亲儿子项目,而且随着Compose 1.0稳定版的发布,精通

    2022-12-12 michael007js 133

  • Jetpack之—App Startup

    App Startup库是什么官方的定义App Startup库提供了一种在应用程序启动时初始化组件的简单、高效的方法。库开发人员和应用程序开发人员都可以使用App Startup来简化启动顺序并明确设置初始化顺序。App Startup库允许您定义共享单个内容提供程序的组件初始化程序,而不是为您需要初始化的每个组件定义单独的内容提供程序。这可以显着改善应用程序启动时间。为什么App Startu

    2022-12-12 michael007js 91

  • 提升滚动体验!CSS 如何设置自动滚动定位的“安全”间距?

    介绍两个和滚动定位相关的 CSS 属性:scroll-padding和 scroll-margin在平时开发中,经常会碰到需要快速定位的问题,比如常见的锚点定位<ul> <li><a href="#语法">语法</a></li> <li><a href="#示例">示例&

    2022-12-12 michael007js 1260

首页
关于博主
我的博客
搜索