phantomVK

Cease to struggle and you cease to live.

Linux终端走本地代理端口

1 2 3 4 alias HTTP_PROXY=" export http_proxy=http://localhost:1087" alias HTTPS_PROXY="export https_proxy=http://localhost:1087" alias UN_HTTP_PROXY="unset http_proxy" alias UN_HTTPS_PROXY="unset ...

动画内存泄漏原理

以下示例动画持续修改 TextView 的文本数值 1 2 3 4 5 6 7 8 9 10 11 12 13 class LeakActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ...

Go1.13 下载依赖超时

用 go mod tidy 整理依赖时出现 github 第三方依赖io连接超时: 1 2 3 4 5 6 7 8 ~/backend/ginframe > go mod tidy go: downloading github.com/stretchr/testify v1.4.0 go: downloading gopkg.in/check.v1 v0.0.0-2016120818...

优雅地缩减APK体积

一、为何优化 安装包体积越小,则用户抗拒下载心理越弱,可提高确认下载率; 小安装包让用户下载时更主动允许流量下载,而无需延迟到Wifi; 从用户体验层面来说,小体积安装包减少下载时间,同时减少安装耗时; 安装包大小与安装后占用存储空间成正相关; 推广按照流量收费,安装包体积越小,推广成本越低; 如果交付产物是SDK,甚至会影响宿主安装包体积; 二、原因 ...

RecyclerView优化

一、数据拉取与处理 1.1 数据处理 大家都知道,数据从网络和本地磁盘加载到内存,为避免主线程阻塞会在io线程上进行。但绑定视图数据时,重量级转换操作也会导致列表滚动卡顿。如果能够预计算,如:字符串替换、拼接、类转换,数据填充到 Adapter 前和加载过程一并在 computation 线程完成转换。 1.2 数据缓存 ViewHolder 共享数据从 Adapter 获取公共变量...

Android注解处理器入门

基础工程 先创建名为 AnnotationDemo 工程,如果已有工程可直接跳过: 注解类组件 工程内新建名为 annotation 的模块。 此模块存放所有注解类,示例注解类名名为 XAnnotation。 1 2 3 4 5 6 7 8 9 import java.lang.annotation.ElementType; import java.lang.annotat...

优化应用启动内存

零、导读 笔者负责的工程长年进行功能迭代,没有处理性能问题,最近终于有空进行内存问题修复。本文记录此次内存问题定位过程及修复方法,并总结开发心得和经验。 应用频繁申请小对象,占用处理器时间片(虚拟机TLAB划分、对象初始化),样本超限令抽样工具卡顿崩溃。巨型对象、长周期对象 增加垃圾回收的时间,给调试处理器占用率、主线程阻塞增加未知风险。 一、目标 每次性能优化要明确阶段性目标,明确...

Android源码系列(26) -- MultiDex

一、介绍 1.1 功能 经过长期需求迭代、引入大量第三方代码库之后,构建的安装包包含海量方法。即便经过代码混淆,依然会在不久的将来遇到 Android64K方法数 问题。 官方对此这样解释: Android 应用 (APK) 文件包含 Dalvik Executable (DEX) 文件形式的可执行字节码文件,这些文件包含用来运行您的应用的已编译代码。Dalvik Execut...

基本生命周期

设备:Samsung Galaxy S4 系统:Android 5.0.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 class MainActivity : AppCompatActivity() ...

Fix: Only fullscreen activities can request orientation

根据运行系统版本号重写 Activity.setRequestedOrientation(Int)。当版本号为 Android O 时不调用父类方法,避免父类检测条件并抛出异常。 1 2 3 4 override fun setRequestedOrientation(requestedOrientation: Int) { if (Build.VERSION.SDK_INT ==...

Java源码系列(24) -- HashMap死循环原理

一、现象 无论哪个JDK实现 HashMap,都不是线程安全。但开发者水平有限,使用 JDK7 HashMap 在多线程操作,或者别人在无意识下把含有 HashMap 的方法在多线程中调用,都将导致不可预测的问题。 由于服务端多线程并发的原因,调用 HashMap.get(K key) 的时候,会偶发处理器100%占用现象。 除了在服务端,Android 开发也偶尔需要 Map 上的多...

Ubuntu18.04,CUDA10.0,TensorFlow-GPU安装

开始以下步骤之前,强烈建议先参考 Ubuntu18.04安装NVIDIA显卡驱动 正确安装显卡驱动。如果显卡驱动已经安装则下面安装 CUDA10 流程可以省略,因为 CUDA10 会自动装好。 Python环境 Ubuntu18.04 同时包含 Python2 和 Python3,但 Python3 相关环境例如 pip 不一定有,所以需要安装 1 sudo apt-get insta...

创建Flutter工程卡死

首次完成配置 Flutter 环境后,通过 flutter doctor 检查 Android Studio 插件已正常安装。 1 2 3 4 5 6 7 8 9 10 11 12 13 > flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel s...

Android滑动返回实现

背景 滑动退出最早出现在 iOS7,是系统提供的标准功能,一直沿用到现在。 对 Android 来说,更多是因为iOS出现该功能,产品经理为统一移动终端的 user experience 而跟进。相比 iOS在系统层完美的实现方式,Android无论用哪种方式,都需要在内存、处理器性能、流畅性之一作出牺牲。 方案 现时讨论最多的两种方案是: 截屏图片模仿透明背景; Wi...

Android源码系列(25) -- Application创建

一、简介 1.1 简介 Application 在Android应用占据重要地位,继承自 Context 父类可直接当 Context 使用。每个进程只有一个实例,肩负起众多功能。 1.2 启动优化 应用第三方依赖库的 初始化、定义全局配置、缓存建立 操作都在 onCreate() 执行。当依赖库日渐增多而 Application 初始化又在主线程进行,初始化任务越多,应用冷启动...