phantomVK

Cease to struggle and you cease to live.

基本生命周期

设备: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 初始化又在主线程进行,初始化任务越多,应用冷启动...

macOS安装Java8

开发库如 Gradle 和 Java11 之间存在兼容问题需用旧版本 Java,但安装旧版本无法用以下命令获取 1 brew install java8 Homebrew 会找不到该库而报错 1 2 3 4 5 6 7 8 Error: No available formula with the name "java8" ==> Searching for a previous...

Android Retrofit使用MultipartBody

指定 RequestBody 上传的文件路径 1 val requestBody = RequestBody.create(MediaType.parse("file/*"), File(filepath)) 构建 MultipartBody 消息体 1 2 3 4 5 val body = MultipartBody.Builder() .setType(Multi...

Ubuntu18.04安装NVIDIA显卡驱动

开始安装 添加PPA,过程中回车确认询问的信息 1 sudo add-apt-repository ppa:graphics-drivers/ppa 依次执行以下命令更新下载源 1 sudo apt update 检查可用驱动 1 ubuntu-drivers devices 根据下列结果,可见 nvidia-driver-430 为推荐驱动安装版本 1 2 3 4 5...

Only fullscreen opaque activities can request orientation

问题 最近同事把 targetSdkVersion 从 26 升到 28 后,原本以为没有兼容性问题,没真机检查就发测试版。结果内部试用 Android 8.0 和 Android 8.1 手机打开 Activity 崩溃。 上报错误具体如下: 1 java.lang.RuntimeException:Unable to start activity ComponentInfo{com...

Android源码系列(24) -- ViewStub

虽然 ViewStub 父类是 View,但其本质是 不可见、无尺寸、懒加载 的布局填充工具,自身没有尺寸和绘图逻辑,不能展示在界面上。 1 public final class ViewStub extends View 当 ViewStub 被设置为可见或调用 inflate() 时进行布局填充。填充过程 ViewStub 从所在父布局中移除,并把懒加载填充的布局添加到相应位置,新...

Default interface methods are only supported starting with Android N

依赖旧版本: 1 2 implementation 'androidx.appcompat:appcompat:1.1.0-alpha04' implementation 'androidx.core:core-ktx:1.1.0-alpha05' 更新为以下版本: 1 2 implementation 'androidx.appcompat:appcompat:1.1.0-beta...

即时通讯头像策略

一、前言 当今几乎所有流行移动应用,无论是新闻资讯、大众娱乐,还是即时通讯,充分利用人类易对视觉冲击做出反应的特点,通过大量的图片和视频组合内容,提高用户对应用的依赖程度。本次研究重点圈定在一个特定领域内,即主题所说的即时通讯头像策略。 用户使用即时通讯应用时,快速识别正在聊天好友身份的方式,首先是映入眼眸的好友头像,而不是人物名称,所以头像具有快速辨别用户身份的作用。 同时,该头像可...

macOS使用polipo

macOS 先通过 Homebrew 安装 Polipo 1 brew install polipo 在用户根目录创建或修改配置文件 ~/.polipo。有两个参数需要修改: proxyPort:polipo 提供服务的端口,默认为8123; socksParentProxy:本地 Socks5 地址,具体看 ShadowSocks 配置,一般为 “127.0.0.1:10...