1. 现代文化中的金钱 一种像货币经济这样的现象,尽管看起来纯粹服从自身的内在规律,实际上却遵循了调节同时代的整个文化运动的同一节奏,这一节奏甚至控制了相去甚远的领域。和历史唯物主义(它认为整个文化过程取决于经济关系)不同,考察金钱给我们的启示是:虽然从经济生活的构成出发,确实对时代的心理状态和文化状态产生了深远的影响,但是另一方面,这种构成本身的特征却是来自历史生活巨大的统一潮流,这一潮流最终的推动力和动机仍是神圣的秘密。
萨姆·阿尔特曼:如何获得成功(How To Be Successful)译文 我观察了成千上万的创始人,并思考了如何才能赚大钱或者创造一些重要的东西。通常,人们一开始想要前者,最后想要后者。我有13个关于如何实现这种杰出成功的想法。
Kotlin 值类 - value class 说起存储模型(model)时,Kotlin的数据类(dataclass)是我们的第一选择。数据类加上一系列必要的方法,使得开发人员的编码效率得到了很大的提升。Kotlin1.5引入了值类()。这是什么类型的类,我们又该何时使用它呢?...
LiveData与SnackBar、Navigation和其他事件(SingleLiveEvent案例) 视图(Activity 或者 Fragment)使用可观察的 可以很方便地与 ViewModel 通信。视图订阅 Livedata 数据的变化并对其变化做出反应。这适用于一直在屏幕上展示的数据。但是,有一些数据只需要消费一次,像 Snackbar 消息,导航事件或者对话框触发器。......
ViewModel 与 LiveData - 模式与反模式 理想情况下,ViewModels 不应该知道 Android 平台的任何信息。这可以提高 ViewModel 的可测试性、泄漏安全性和模块性。一般的经验法则是,确保在你的ViewModel 中没有导入 包(除了 )。Presenter 也应是如此。条件语句、循环和一般决策应该由 ViewModel 或者 app 的其他层而非 Activity 或 Framework 负责完成。 视图通常没有单元测试,所以里面的代码越少越好。.........
Android 触摸系统 - 第二部分:常见触摸事件处理场景 这是 Android 触摸系统系列文章的第二部分,第一部分:触摸函数和 View 层次结构深入解析了触摸处理函数以及这些函数如何影响触摸事件在view 层次系统中的流动。本文将用图表展示这些触摸函数如何工作。...
Android 触摸系统 - 第一部分:触摸函数和 View 层次结构 如果对Android视图如何触摸事件没有深刻的理解,你会对许多触摸行为感到迷惑:为什么点击了按钮没有生效?为什么 没有滚动?为什么我需要处理嵌套的 ?本文将介绍触摸事件如何在 view 层次结构中流动,核心函数如何影响事件流。......
Kotlin 伴生对象(companion object) VS 全局函数 Kotlin的伴生对象(companion object)在语法上类似于Java中的静态方法,所以很多人也都是这样用的。本文将向你展示伴生对象的工作方式和在Kotlin中创建静态方法的推荐做法。
Android 实现连续多次点击 定义一个通用的抽象类:public abstract class MultiClickListener : View.OnClickListener { private var count = 5 // 默认连续点击5次 private var hits: LongArray = LongArray(count) //记录点击次数 private var duration: Long = 2000L // 默认有效时间 constructo
Android 自带对象池Pools工具类简介 Android 包 androidx.core.util 下有个工具类 Pools,为开发者提供了两种对象池,没有同步控制的SimplePool 和 有同步控制(访问加锁)的SynchronizedPool(继承自SimplePool),方便开发者根据需要创建对应类型的对象池Pools类的源码也非常简单,一看就懂public final class Pools { /** * 对象池接口 */ public interface Pool<T> {
Java虚拟机类加载机制简介 本文介绍Java虚拟机类加载机制。以下内容总结来自于《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制类的生命周期包括以下 7 个阶段:加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)使用(Using)卸载(Unloa
Java虚拟机内存分配与回收策略简介 本文介绍Java虚拟机内存分配与回收策略。以下内容总结来自于《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》Java虚拟机自动内存管理机制包含两个方面:给对象分配内存以及回收分配给对象的内存内存回收与垃圾收集器在很多时候都是影响系统性能、并发能力的主要因素之一,虚拟机之所以提供多种不同的收集器以及提供大量的调节参数,是因为只有根据实际应用需求、实现方式选择最优的收集方式才能获取最高的性能Minor GC 与 Full GC新生代GC(Minor GC):指发生在新生代的垃圾收集
Java 虚拟机垃圾收集机制简介 本文介绍Java虚拟机垃圾回收机制。以下内容总结来自于《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》垃圾收集机制垃圾收集需要考虑三件事:哪些内存需要回收?什么时候回收?如何回收?回收对象垃圾收集主要是针对Java堆和方法区进行程序计数器、虚拟机栈和本地方法栈这三个区域只存在于线程的生命周期内,因此不需要对这三个区域进行垃圾回收Java堆和方法区是线程共享的。在程序运行期间,一个接口的多个实现类所需内存可能大小不一样;一个方法中多个分支所需要的内存可能不一样;程序运行时
Java内存区域知识简介 本文介绍Java虚拟机内存的各个区域。以下内容总结来自于《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》Java内存区域Java虚拟机在执行Java程序的过程中将其所管理的内存划分为以下几个运行时数据区域:线程独有的数据区程序计数器记录当前线程正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法,则为空(Undefined))Java虚拟机栈虚拟机栈描述的是Java方法执行的内存模型:每个 Java 方法在执行时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出
Android ColorStateList 设置同时处于两个状态的颜色不生效 ColorStateList 允许我们根据View的不同状态为View设置不同的颜色,比如TextView在按压态、选中态、禁用态等状态的背景颜色。创建方式有两种:XML静态定义和java代码动态创建XML 静态定义和使用创建color类型的xml资源文件,然后在布局的xml文件中引用该颜色资源文件即可<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com
Android 属性动画原理解析 目录属性动画简介什么是属性动画属性动画的基本模型android 属性动画使用示例ValueAnimatorObjectAnimatorViewPropertyAnimator属性动画的执行流程动画循环代码实现帧刷新机制Android Display系统的工作方式早期帧刷新机制优化:Project Butter代码实现根据动画已播放时长计算属性值线性动画示例非线性动画示例时间插值器类型估值器代码实现设置属性值代码实现
Android materialDesign 风格阴影 改变阴影颜色 我们知道,在 Android 5.0 以后,可以通过 xml 或 Java代码 的方式给 View 添加阴影// 方式一:xml 设置android:elevation="10dp"// 或android:translationZ="10dp"// 方式二:java 代码设置view.setElevation(20);// 或view.setTranslationZ(20);...