skyrin

skyrin

37 posts
Android Jetpack - LiveData
Android

Android Jetpack - LiveData

LiveData 概述LiveData 是一个可观察数据包装类,与普通观察者不同,LiveData 具备生命周期感知能力,这意味着它遵循其它应用组件的生命周期(Activity、Fragment、Service 等),此感知能力确保了 LiveData 只更新处于生命周期活跃状态的组件的观察者 生命周期活跃状态的定义是这些组件正处于 STARTED 或 RESUMED 状态,LiveData 只会更新活跃状态的观察者,而已注册但处于非活跃状态的观察者不会被更新 我们可以在实现了 LifecycleOwnerJetpack的接口的对象中注册 observer,这种关联允许 observer 在与之相关的 Lifecycle 对象处于

  • skyrin
    skyrin
Android Jetpack - Lifecycles
Android

Android Jetpack - Lifecycles

Lifecycles 简介Lifecycles 即生命周期,属于 Jetpack 架构组件之一的 Lifecycles 组件是可以为其它组件提供生命周期感知能力的一个组件,而具备了生命周期感知能力的组件就叫生命周期感知组件,注意加粗部分多读两遍,我看网上很多文章直接把 Lifecycles 组件叫生命周期感知组件😂 那么什么是生命周期感知能力呢?我们知道四大基础组件有生命周期,能感知这些生命周期的组件就具备了生命周期感知能力,所以我认为以前我们使用的 MVP 模式中的 Presenter 如果它通过接口等方式间接获得了 Activity 的生命周期,它也算是一个生命周期感知组件,但是这种获取生命周期的方式和 Lifecycles 比起来还是太 low 了,我们接着对比传统生命周期感知方式,

  • skyrin
    skyrin
Android Jetpack - ViewModel
Android

Android Jetpack - ViewModel

ViewModel 简述ViewModel 旨在以生命周期感知的形式存储和管理 UI 控制器(Activity/Fragment 等)相关的数据,可以解决 UI 控制器中数据无法正确保留以及数据在其复杂的生命周期中难以维护的痛点,它的生命周期感知能力需要配合 Lifecycles 组件才能实现,本文聚焦于 ViewModel 所以先不讲 Lifecycles ,关于 Lifecycles 我会在其它文章详细介绍 为什么使用 ViewModel ?我觉得这个问题很重要,当我们使用任何一个新工具的时候都需要弄清楚这个问题,要结合实际情况而非盲目跟随,接下来我会逐一尝试说明 ViewModel 对比传统方案的优劣

  • skyrin
    skyrin
Android Jetpack - DataBinding
Android

Android Jetpack - DataBinding

什么是 DataBinding ?DataBinding 是属于 Jetpack 的一个支持库,可以让你以在布局中声明属性的方式替代编码方式将布局中的 UI 组件和应用数据进行绑定 通常我们让控件和数据交互的方式如下面的代码,调用 findViewById() 获取 TextView 控件并将 viewModel 中的 userName 属性赋值给它: findViewById<TextView>(R.id.textView).apply { text = viewModel.userName

  • skyrin
    skyrin
Android Jetpack - Room
Android

Android Jetpack - Room

Room 简介Room 持久化库提供了一个基于 SQLite 的抽象层,以便在利用 SQLite 的全部功能的同时实现更强大的数据库访问 Room 库帮你的 App 在设备上创建一个缓存,并作为此 App 的单一事实来源,允许用户在应用内查看关键信息的一致副本,无论用户是否具有互联网连接 处理重要数量的结构化数据的应用程序可以从本地保存数据中受益匪浅。最常见的用例是缓存相关的数据。这样,当设备无法访问网络时,用户仍然可以在离线时浏览该内容。然后,在设备重新联机后,任何用户启动的内容更改都会同步到服务器 Room 的三个主要部分包括 Database 包含数据库持有者,并作为应用程序的持久关系数据的基础连接的主要访问点。

  • skyrin
    skyrin
Kotlin - 作用域函数
Kotlin

Kotlin - 作用域函数

什么是作用域函数(Scope Functions)?Kotlin 标准库包含了几个特殊的函数,其目的是在调用对象的上下文环境(context)中执行代码块。当你在提供了 lambda 表达式的对象上调用此类函数时,它会形成一个临时作用域。在此作用域内,你可以在不使用其名称的情况下访问该对象,这些函数被称为作用域函数。在 Kotlin 中,作用域函数总共有五个,分别是:let、run、with、apply、also。接下来我们逐个详细分析。 开始分析之前,你可能需要简单了解下它大概长什么样,下面是个简单示例 data

  • skyrin
    skyrin
工具

快速发布 Android/Java Libs 到 Bintray 以及 Jcenter

本文内容为:如何使用 BintrayRelease 插件快速发布一个 Android/Java Lib 到 Bintray Mavne,并引入 Project 使用的流程。 创建 Bintray 账户及 Maven 仓库1、打开 Bintray 首页,点击 For an Open Source Account Sign Up Here,快速注册或者用第三方的账户登陆即可 2、个人页面点击 Add New Repository 创建一个 Mavne 仓库 填写仓库信息,仓库名称记住,后面有用 3、获取

  • skyrin
    skyrin
工具

强烈推荐 3 个非常棒的移动端APP

前言明人不说暗话,这篇文章就是蹭上个月《强烈推荐 3 个非常棒的 Chrome 插件》这篇文章热度的,对,你没有看错,自己蹭自己的热度,就是这么倔强和骄傲😂,其实上个月那篇文章截止现在3k多浏览100来个点赞算个毛线的热度。但是,我想说的是,我在简书吭哧吭哧更了快两年20多篇文章总共的阅读量和点赞量加起来,也没有上一篇多😂。后来,我仔细想了一下,原因应该是以前更的全是技术相关的文章,受众面小,上次写的是实用工具,受众面大,再加上之前的文章标题里带了"强烈推荐"四字,不过我是真心强烈推荐不是标题党哦,所以,本文我又非常"机智"的在标题里加了"强烈推荐"四个字,一来呢这次也是真心强烈推荐,再一个我也想看看这篇能有几个赞。 OK,废话说完,上货! 1、爱音乐下载链接:爱音乐 我一度称它是一款"不知道什么叫做音乐版权的 APP"

  • skyrin
    skyrin
工具

强烈推荐 3 个非常棒的 Chrome 插件

作为一名程序猿,我基本上每天都会浏览一些技术博客、技术论坛、新闻资讯、视频教程等站点或平台,而且大部分时间都是在晚上。 经常在晚上有阅读习惯的同学都知道,在阅读过程中,最痛苦的,莫过于多数网站都只有一个惨白惨白的主色调,没有夜间模式,看不了几分钟就眼睛生疼,尤其是在密密麻麻的官方文档中查找一个 API,真是能看瞎我的钛合金狗眼🤪。 还有就是很多视频站点都没有倍速播放功能,对于我这么浮躁的人来说,这简直不能接受,下面就给大家推荐三个6到飞起的插件,完美解决如上问题。 1、Dark Reader官网:https://darkreader.org Chrome 插件地址:https://chrome.google.com/webstore/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh GitHub 地址:https://github.com/darkreader/darkreader Dark

  • skyrin
    skyrin
Android

Android 5.x 免 Root 升级系统 WebView

前言Android 的系统碎片化问题可以说是 Android 系统最大的硬伤了,自这个系统诞生以来十几年过去了,依然没能很好的解决,碎片化问题也是每个 Android 开发工程师心中的隐痛😂,每次处理系统碎片化带来的问题时,血压也能分分钟飙升到 200+,为了减轻其他同仁的痛苦以及此后再遇到类似问题能少踩几个坑,就之前的爬坑经历做个记录吧。 1、WebView有关 WebieView 的重要性和其使用不是本文的重点,但是有几个相关的属性我们必须了解: WebView 迭代历史在Android4.4(API level 19)系统以前,Android使用了原生自带的Android Webkit内核,这个内核对HTML5的支持不是很好,现在使用4.4以下机子的也不多了,就不对这个内核做过多介绍了,有兴趣可以看下这篇文章。 从Android4.4系统开始,Chromium内核取代了Webkit内核,正式地接管了WebView的渲染工作。Chromium是一个开源的浏览器内核项目,基于Chromium开源项目修改实现的浏览器非常多,包括最著名的Chrome浏览器,以及一众国内浏览器(360浏览器、QQ浏览器等)。其中Chromium在Android上面的实现是Android

  • skyrin
    skyrin
Android

Android 自定义 View - AreaSelectLayout

前几天写了一个小工具,其中一个设置项需要屏幕区域范围坐标参数,由于通过观察直接填写坐标信息不太现实,于是就有了通过直接拖拽屏幕去取这个参数的需求,又因为需要在任意界面都能选取,所以就想到了悬浮窗,这里以前写过一个悬浮窗工具类《FloatWindowUtils 实现及事件冲突解决详解》,想着再加一些手势及绘制应该就能实现,于是吭叽吭叽搞了半天,发现其中还是有些坑的,所以在此记录备忘。 效果图和用法如下: 如上图,这个 View 的功能很简单,就是在屏幕上弹出一个全屏悬浮窗遮罩,然后在上面拖拽选择区域,最后保存坐标信息就好了。 详细实现我就不讲了,后面会贴源码,这里主要讲一下实现思路和几个需要注意的点 实现思路继承 View 还是 ViewGroup由于悬浮窗里需要有提示文字以及取消和保存两个按钮,所以我没有直接去继承 View 来写,直接继承 View 来实现当然也可以,但是需要把下面的文字以及按钮都画出来,可能还需要内置按钮的触发回调等等业务,最终我选择了继承 ViewGroup(ConstrainsLayout) 来实现,这样做可以共享 ConstrainsLayout 的所有属性。和直接继承

  • skyrin
    skyrin
工具

SSH 通过密钥配置免密登陆主机

本地创建 rsa 密钥对备份原密钥cd ~/.ssh/ mkdir key_bak cp id_rsa* key_bak 创建 rsa 密钥对ssh-keygen -t rsa -C "abc@gamil.com" 这一步会提示输入密钥存放位置、名称、密码等,可以一直回车使用默认值。 新生成的密钥对会覆盖原密钥。 登陆远程主机创建授权文件按照正常方式登陆 ssh root@192.168.18.9 ⚠️注意,这一步以 root 用户登陆,可能和你的不同,不够之后的配置都相对一致。 登陆成功后,在用户目录下创建 .ssh/authorized_keys

  • skyrin
    skyrin
Android

Android 架构 - MVVM 介绍

概述 只要你掌握了基础知识,要想构建一个完整的 Android App 并不难,但是想要写出一个可维护的 App 就是另一回事了,这时候就必须让你自己的代码足够健壮,就需要避免把所有业务逻辑代码都放在 Activity、Fragment,或者是创建多个比较小的只有单一功能的 class。 那么应该怎么做呢?—— 使用 **架构模式!**MVC、MVP、MVVM、...任何一种都要比没有架构设计的流水式代码好得多,MVVM 是 Android 开发最好的架构选择之一。Google 官方也非常支持和鼓励开发者使用这一架构模式。 本教程将为你讲明白到底什么是 MVVM,虽然我也不喜欢理论,但有时候在实际操作之前先了解它非常重要,所以请务必耐心看完。 Model-View-ViewModel 的意义关注点分离原则是架构的终极原则,并且每个设计模式都在尽其所能的实现这一点。在 MVVM 中,有 3 个固定部分有助于实现关注点分离:models,views

  • skyrin
    skyrin

编码、加密和 Hash

Hash定义散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。 —— Wikipedia-Hash 简单来说就是 Hash 这种算法可以把任意数据转换成指定的大小范围(通常在256字节以内)的数据。 作用Hash 把数据压缩成摘要,因此最主要用途是数字指纹。 实际用途唯一性验证:Java 中的 hashCode() 方法。数据完整性验证:从网络下载文件时,为防止文件传输中丢失,

  • skyrin
    skyrin
工具

使用 Certbot 安装 Letsencrypt 证书

概述本文介绍如何通过 Certbot 安装 Https Letsencrypt 证书 先决条件1、拥有一个域名,例如 mydomain.com 2、在域名服务器创建一条A记录,指向云主机的公网IP地址。例如 demo.mydomain.com 指向 192.168.0.1 的IP地址 3、要等到新创建的域名解析能在公网上被解析到 安装 Certbot前往 Certbot 官网按照步骤安装  certbot 或者直接获取自动安装脚本,然后在按如下两种模式生成证书 wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto # 给脚本执行权限

  • skyrin
    skyrin
HTTP

HTTP 的基础概念

HTTP 的定义HTTP (Hypertext Transfer Protocol) 即超文本传输协议,和 HTML (Hypertext Markup Language) 超文本标记语⾔一起诞⽣,用于在⽹络上请求和传输 HTML 内容。 超文本 (Hypertext),即「扩展型⽂本」,指的是 HTML 中可以有链向别的⽂本的超链接 (Hyperlink)。 以上定义中 Hyper 有拓展的一层意思,互联网创始之初,人们就在思考如何更加方便的在互联网传输信息,最初这些信息都是以文本形式进行传输,随着互联网信息越积约多,就急需一种让文件之间互相关联起来的方式来提高信息查找效率,于是 HTML 这种在文本文件中可以指向别的文本的语言(Hypertext Markup Language 超文本标记语言)就诞生了,随后用户传输这种文本的协议也诞生了也就是

  • skyrin
    skyrin
工具

youtube-dl CMD

USAGE:youtube-dl [OPTIONS] URL [URL...] OPTIONS:通用选项-h, --help 打印帮助文档 --version 打印版本信息 -U, --update 更新到最新版(需要权限) -i, --ignore-errors 遇到下载错误时跳过 --abort-on-error 遇到下载错误时终止 --dump-user-agent 显示当前使用的浏览器(User-agent) --list-extractors 列出所有的提取器(支持的网站) --extractor-descriptions 同上 --force-generic-extractor 强制使用通用提取器下载 --default-search PREFIX 使用此前缀补充不完整的URLs,例如:"ytsearch2 yt-dl" 从youtube搜索并下载两个关于yt-dl视频. 使用"auto"youtube-dl就会猜一个,一般效果等价于"ytsearch"("auto_warning"

  • skyrin
    skyrin
工具

Vim 快捷键说明及常用命令

移动光标的方法 快捷键 作用 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 h 或 向左箭头键(→) 光标向右移动一个字符 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! 快捷键 作用 [Ctrl] + [f] 屏幕『向下』移动一页,相当于

  • skyrin
    skyrin
Android

Android CPU ABI

ABI 简述不同 Android 设备使用不同的 CPU,因此支持不同的指令集。CPU 与指令集的每种组合都有其自己的应用二进制界面(或 ABI)。 ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。 您必须为应用要使用的每个 CPU 架构指定 ABI。 典型的 ABI 包含以下信息: 机器代码应使用的 CPU 指令集。运行时内存存储和加载的字节顺序。可执行二进制文件(例如程序和共享库)的格式,以及它们支持的内容类型。用于解析内容与系统之间数据的各种约定。这些约定包括对齐限制,以及系统如何使用堆栈和在调用函数时注册。运行时可用于机器代码的函数符号列表 - 通常来自非常具体的库集。目前几种 Android CPU ABICPU 架构描述armeabi第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢armeabi-v7a第7代

  • skyrin
    skyrin