Giter VIP home page Giter VIP logo

blog-comment's People

blog-comment's Issues

Jetpack Compose 源码解析之 Snapshot | Know it & why

https://blog.chrnie.com/2021/10/10/Jetpack-Compose-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90%E4%B9%8B-Snapshot/

引言Snapshot 是 Jetpack Compose Runtime 中的一个子模块,主要用于解决以下两个问题: 利用多版本并发控制算法,保证并发环境下视图状态的原子性、一致性、隔离性。 提供对状态读写的监听能力。 用例演示12345678910111213141516171819202122232425fun main() { // 创建可跟踪读写的可变状态,初始化值:0

手把手实现扫光 TextView | Know it & why

https://blog.chrnie.com/2018/06/24/%E6%89%8B%E6%8A%8A%E6%89%8B%E5%AE%9E%E7%8E%B0%E6%89%AB%E5%85%89-TextView/

最近发现很多 App 在 TextView 上使用了扫光特效,以吸引用户眼球。刚好最近也遇到了同样的需求,本文记录如何从零开始写一个带扫光特效的 TextView。 扫光原理扫光的效果其实就是在要显示的内容上改变部分内容的颜色。 图中的就是在黑色的文字中,有部分文字的颜色改成了渐变透明的白色,辅以不断移动被改变的颜色的位置,便形成了扫光的动画。 实现图层的叠加扫光特效的核心就是改变部分区域内文字

aosp 源码学习环境搭建 | Know it & why

https://blog.chrnie.com/2021/06/08/aosp-%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/

对于 Android 应用开发工程师来说想要技术上更上一层楼,那么阅读和学习 aosp 代码可以说是一个必经之路,因为通过学习 aosp 代码能更好的理解 Android 系统整个运作机制,从而指导我们更好的设计应用技术方案。 虽然现在谷歌搭建好了在线的源码阅读平台:Android Code Search,但是使用体验不如人意。而且纸上得来终觉浅,只有实际修改代码运行才会有更深的理解,这里我将分享

Manjaro 安装记 | Know it & why

https://blog.chrnie.com/2016/06/23/Manjaro-%E5%AE%89%E8%A3%85%E8%AE%B0/

最近想尝试把 Android 的开发环境转移到 Linux 上, 因为不想继续在 Windows 使用 babun (经过订制的开箱即用的 cygwin) 凑合了. 我本着不折腾的原则, 来来去去安装了几个发行版本:0. Ubuntu, 一直以简易好手上著称, 但是在我安装了最小版本之后发现双击 .deb 文件居然不能正常安装软件了, 安装搜狗输入法的时候也不正常. 遂放弃.0. Deepin,

使用 Travis CI 自动化部署 Hexo 生成的静态博客到 Firebase Hosting | Know it & why

https://blog.chrnie.com/2018/03/08/%E4%BD%BF%E7%94%A8-Travis-CI-%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2-Hexo-%E7%94%9F%E6%88%90%E7%9A%84%E9%9D%99%E6%80%81%E5%8D%9A%E5%AE%A2%E5%88%B0-Firebase-Hosting/

先说下前因吧,原本博客是托管在 Github Pages 上的,但是一直觉得速度不理想、打开得比较慢,但是又找不到合适的替代品故放任不理。无意中发现 Firebase 提供了静态资源托管服务,而且居然是国内可用的,经过测试速度很可观(反正感觉是比 Github Pages 要快)。于是就开始着手博客迁移的工作,本文便是这次折腾经过的总结。在正式开始之前,先介绍一遍涉及到的东西:0. Hexo:静态

FragmentPagerAdapter 使用指南 | Know it & why

https://blog.chrnie.com/2017/09/16/FragmentPagerAdapter-%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/

本文记录一些关于使用 FragmentPagerAdapter 时的方法总结,帮助我们优化 ViewPager 的性能。 数据刷新在默认情况下,调用 PagerAdapter#notifyDataSetChanged() 并不会刷新已经存在的页面排序。需要我们重写 PagerAdapter#getItemPosition() 方法。该方法返回刷新后已经存在 fragment 的新位置。并且已经预定

Transition Animation 学习笔记 | Know it & why

https://blog.chrnie.com/2017/02/23/Transition-Animation-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

Android中的动画Android框架为开发者提供了三种类型动画机制: Property Animation - 属性动画 View Animation - 补间动画 Drawable Animation - 帧动画 Transition Animation在新版本中,引入了一种新的动画机制–Transition Animation(过渡动画)。该动画本质上是对于属性动画的一种扩展。该动画有

Android 异步编程-RxJava | Know it & why

https://blog.chrnie.com/2020/01/27/Android-%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B-Rxjava/

在 Android 异步编程-回调 中我们已经介绍了如何通过回调设计异步接口。相比起使用回调设计异步接口,RxJava 完成了一些异步通用逻辑的抽象,使用它解决异步问题能让我们更专注于业务逻辑本身。 设计异步接口同步的接口转换成通过 RxJava 来实现的异步接口有一些通用的原则,并且 RxJava 库本身已经提供了一些函数用于帮助我们将原本同步设计的接口迁移至用 RxJava 实现的异步接口:

使用 jmh 做基准测试(benchmarks) | Know it & why

https://blog.chrnie.com/2019/03/30/%E4%BD%BF%E7%94%A8-jmh-%E5%81%9A%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95/

jmh 是 JVM 平台上的基准测试(benchmarks)工具,方便在做性能优化时获取量化性能指标。本文主要将介绍在基于 gradle 构建的 kotlin 项目中如何引入 jmh 并使用。默认读者知道已经如何通过 gradle 创建一个 kotlin 工程,将跳过基本的使用 gradle 创建 kotlin 工程的步骤,直接从修改 build.gradle 脚本开始演示。 添加基准测试源码

Glide 中 BitmapPool 的极致性能优化 | Know it & why

https://blog.chrnie.com/2018/05/22/Glide-%E4%B8%AD-BitmapPool-%E9%AB%98%E6%95%88%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6/

对象池在某些时候,我们需要频繁使用一些临时对象,如果每次使用的时候都申请新的资源,很有可能会引发频繁的 gc 而影响应用的流畅性。这个时候如果对象有明确的生命周期,那么就可以通过定义一个对象池来高效的完成复用对象。 12345678910private final Map<String, Bitmap> cache = new HashMap<>()private vo

Gradle 打包上传到 maven 仓库小记 | Know it & why

https://blog.chrnie.com/2019/02/18/Gradle-%E6%89%93%E5%8C%85%E4%B8%8A%E4%BC%A0%E5%88%B0-maven-%E4%BB%93%E5%BA%93%E5%B0%8F%E8%AE%B0/

在 Android 开发中,说到 maven 仓库大家一定都不陌生,每当我们需要使用第三方的库的时候,最方便的添加依赖的方法如下: implementation “io.reactivex.rxjava2:rxjava:2.x.y” 只需在 dependences 代码块中添加一行代码,gradle 脚本便会自动从配置的 maven 仓库(Android 默认配置为 JCenter)中下载

Android 异步编程-回调 | Know it & why

https://blog.chrnie.com/2019/11/17/Android-%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B-%E5%9B%9E%E8%B0%83/

为什么需要异步有始必有因,在说怎么编写异步代码之前我们先要搞清楚为什么需要异步。考虑这样一个用户登陆的业务场景,当用户点击登陆后,首先需要从 SSO 服务器获取 token,然后分别登陆 IM 服务和从业务服务器拉取用户信息,这其中的每一个步骤失败都会导致登陆失败。流程图如下所示: 根据流程图,设计出如下接口: 12345678910111213141516171819public interf

深入探索 fitsSystemWindows | Know it & why

https://blog.chrnie.com/2018/03/25/%E6%B7%B1%E5%85%A5%E6%8E%A2%E7%B4%A2-fitsSystemWindows/

相信大家对 fitsSystemWindows 一定不陌生,在使用 Google 提供的 design support 库中的 CoordinatorLayout 布局时经常用到,但是又具体说不清这个东西到底有什么用!本文现在就来一探究竟,fitsSystemWindows 到底是干什么的。 fitsSystemWindows 默认实现在探究 fitsSystemWindows 之前,我们首先需要

Kotlin 中另类的单例写法 | Know it & why

https://blog.chrnie.com/2019/08/02/Kotlin-%E4%B8%AD%E5%8F%A6%E7%B1%BB%E7%9A%84%E5%8D%95%E4%BE%8B%E5%86%99%E6%B3%95/

Java 的单例就不用多说了,懒汉式、饿汉式、双重检查锁等等很多种写法。而在 Kotlin 中呢,最开始学习到的一定是通过 object 关键字来编写单例。示例: 1234object Singleton { fun foo(): String = “Singleton"} 但是这种写法有一个缺点,不支持有参构造函数。而在 Android 环境中,大部分情

自定义 DataBinding 双向绑定属性 | Know it & why

https://blog.chrnie.com/2016/12/02/%E8%87%AA%E5%AE%9A%E4%B9%89-DataBinding-%E5%8F%8C%E5%90%91%E7%BB%91%E5%AE%9A%E5%B1%9E%E6%80%A7/

DataBindingDataBinding 是 Google 推出的用于完成 Java 层数据到 xml 中的绑定工具,便于完成 MVVM 架构。Data Binding Library官方给出的向导很详细的讲述了 DataBinding 如何使用的,但是却没有提到如何自定义双向绑定属性,本文接下来将通过自定义一个View,使其能支持双向绑定的 display 属性来讲解自定义双向绑定属性的过程

Android 异步编程-协程 | Know it & why

https://blog.chrnie.com/2020/04/04/Android-%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B-%E5%8D%8F%E7%A8%8B/

在前两篇博文中介绍了如何通过回调或者是 Rxjava 库来完成异步编程,回调是一种最原始的实现异步的方式,而 RxJava 作为第三方库虽然补足了回调实现的一些缺陷,但毕竟不是从语言层面解决问题,因此接口的设计多多少少还是受到了一些限制,例如只能通过链式 API 的表现形式解决地狱回调的问题,从而需要学习各式各样的 API 函数导致了学习成本的提高。那么有没有从语言层面解决回调缺陷问题的异步方案呢

关于通用的对象池 | Know it & why

https://blog.chrnie.com/2018/08/19/%E5%85%B3%E4%BA%8E%E9%80%9A%E7%94%A8%E7%9A%84%E5%AF%B9%E8%B1%A1%E6%B1%A0/

前言首先,需要承认本文可能有些标题党。因为这里的通用只是在一个特定情景下,为了使用对象池的技术可以避免编写重复的模板代码。在开始编写代码前,先交代一下该需求出现的背景:整个应用的架构采用了 MVVM 的模式,在 ViewModel 中抽象出一个视图对象,该对象通过业务逻辑中的一个可变对象转换而成。至于为什么不直接使用该可变对象,有一下几个原因: 需要该对象是不可变的,以良好的支持在哈希结构的容器

编译用于 Android 的 lame 动态链接库 | Know it & why

https://blog.chrnie.com/2019/06/30/%E7%BC%96%E8%AF%91%E7%94%A8%E4%BA%8E-Android-%E7%9A%84-lame-%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93/

本文介绍主要如何编译出用于 Android 的 lame 动态链接库,但适用于所有的使用了 autoconf 的项目。 构建过程在介绍具体的操作步骤之前,首先简单了解一下 c 源代码是如何通过编译器变成机器可执行文件的: 预处理:预处理过程主要处理源代码文件中的以“#”开始的预编译指令。该过程生成的文件一般以 .i 作为后缀。 编译:编译过程就是把预处理完的文件进行一系列词法分析、语法分析

EventLiveData | Know it & why

https://blog.chrnie.com/2018/08/12/EventLiveData/

Google 现在大力推广 arch 架构,其中提供了 LiveData 和 ViewModel 的通用抽象来连接 Model 层与 View 层的代码。LiveData 具有感知生命周期的能力,使得编写 ViewModel 的代码时候可以忽视生命周期变化带来的影响,但是因为 LiveData 在 observer 每次从不活跃状态进入活跃状态时都会确保 observer 收到了最近一次的值,这个

优化 Android 应用启动性能笔记 | Know it & why

https://blog.chrnie.com/2019/05/02/%E4%BC%98%E5%8C%96%20Android%20%E5%BA%94%E7%94%A8%E5%90%AF%E5%8A%A8%E6%80%A7%E8%83%BD%E7%AC%94%E8%AE%B0/

启动流程完整流程完整的应用启动流程分为两个阶段执行: 系统执行阶段 加载应用 显示应用 StartingWindow 创建应用进程 应用执行阶段 创建 Application 对象 启动主线程 创建 Activity 对象 填充视图 测量、布局视图 渲染首帧 不同场景流程并不是每次启动时都需要执行完整的启动流程,在不同的场景下启动流程会有不同程度的精简。 Cold该场景下,应用

aosp 源码学习环境搭建 | Know it & why

https://blog.chrnie.com/2021/06/07/aosp-%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/

对于 Android 应用开发工程师来说想要技术上更上一层楼,那么阅读和学习 aosp 代码可以说是一个必经之路,因为通过学习 aosp 代码能更好的理解 Android 系统整个运作机制,从而指导我们更好的设计应用技术方案。 虽然现在谷歌搭建好了在线的源码阅读平台:Android Code Search,但是使用体验不如人意。而且纸上得来终觉浅,只有实际修改代码运行才会有更深的理解,这里我将分享

开发调试 sdk 项目的一点小技巧 | Know it & why

https://blog.chrnie.com/2021/05/23/%E5%BC%80%E5%8F%91%E8%B0%83%E8%AF%95-sdk-%E9%A1%B9%E7%9B%AE%E7%9A%84%E4%B8%80%E7%82%B9%E5%B0%8F%E6%8A%80%E5%B7%A7/

开发调试时遇到的麻烦以一个常见的 sdk 项目结构为例,该项目中包含了三个模块: common:通用的模块,不直接对外暴露。 library:对外暴露的 sdk 实现模块,会依赖 common 模块。 sample:用于演示 library 的用法,会依赖 library 模块。 一般 sdk 最终会完成打包并发布至 maven 仓库中方便其他业务开发使用,假定当前项目的 Group I

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.