Skip to content

Commit d5aaa19

Browse files
committed
📝修改SATA 扩展卡章节 IO-01/Blog@a809bca
1 parent e117e5e commit d5aaa19

File tree

20 files changed

+1242
-1242
lines changed

20 files changed

+1242
-1242
lines changed

index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<!doctype html><html class="scroll-pt-16 scroll-smooth" lang=zh><head><meta name=generator content="Hugo 0.110.0"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><link rel=icon href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'> <text x='0' y='14'>🧑‍💻</text> </svg>"><link rel=stylesheet href=https://blog.io01.xyz/css/style.css><script type=text/javascript src=https://blog.io01.xyz/js/main.js></script><title>IO01 Blog</title></head><body><header class="sticky top-0 z-10 bg-white backdrop-filter backdrop-blur-lg bg-opacity-70 border-b border-gray-200"><nav class="max-w-5xl mx-auto px-4"><div class="flex items-center justify-between h-16"><a href=/ class="text-2xl text-gray-900 font-semibold">IO01 Blog</a><ul class="flex space-x-4 text-gray-900"><li><a href=https://blog.io01.xyz/posts>归档</a></li><li><a href=https://blog.io01.xyz/about>关于</a></li></ul></div></nav></header><div id=content><main class="flex flex-col justify-center"><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/0j3l/>自建NAS方案选型-硬件篇</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2023-01-13</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/homelab/ class="text-gray-500 mr-1">HomeLab</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>之前使用的是多年前很火的威联通 453Bmini,2000 块钱 4 盘位的成品 NAS,性价比很高,开箱即用。虽然很多人认为可用性不如群晖,但是我个人的使用不喜欢依赖某一个品牌的生态,大多是开源组装的,所以对我来说威联通和群晖没什么本质区别。慢慢的用途越来越多,这款 NAS 选用的 J3455 性能低下和硬盘无法休眠实在太吵成了我的困扰,特别在理清了我本身不需要任何成品 NAS 生态的需求后,自己组装一台 NAS 成了唯一选择。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/9qg5/>子线程更新 UI 全解</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2022-01-06</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/android/ class="text-gray-500 mr-1">Android</a>
2-
<a href=https://blog.io01.xyz/tags/%E6%BA%90%E7%A0%81/ class="text-gray-500 mr-1">源码</a></div></div><div class="summary-item prose max-w-none"><h2 id=子线程更新-ui-异常设计理念及简单源码解析>子线程更新 UI 异常设计理念及简单源码解析</h2><p>初学者可能会犯在子线程更新 UI 的错误,例如:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-kotlin data-lang=kotlin><span style=display:flex><span style="white-space:pre;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>thread { imageView.setBackgroundColor(<span style=color:#50fa7b>Color</span>.RED) }
1+
<!doctype html><html class="scroll-pt-16 scroll-smooth" lang=zh><head><meta name=generator content="Hugo 0.111.1"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><link rel=icon href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'> <text x='0' y='14'>🧑‍💻</text> </svg>"><link rel=stylesheet href=https://blog.io01.xyz/css/style.css><script type=text/javascript src=https://blog.io01.xyz/js/main.js></script><title>IO01 Blog</title></head><body><header class="sticky top-0 z-10 bg-white backdrop-filter backdrop-blur-lg bg-opacity-70 border-b border-gray-200"><nav class="max-w-5xl mx-auto px-4"><div class="flex items-center justify-between h-16"><a href=/ class="text-2xl text-gray-900 font-semibold">IO01 Blog</a><ul class="flex space-x-4 text-gray-900"><li><a href=https://blog.io01.xyz/posts>归档</a></li><li><a href=https://blog.io01.xyz/about>关于</a></li></ul></div></nav></header><div id=content><main class="flex flex-col justify-center"><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/0j3l/>自建NAS方案选型-硬件篇</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2023-01-13</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/homelab/ class="text-gray-500 mr-1">HomeLab</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>之前使用的是多年前很火的威联通 453Bmini,2000 块钱 4 盘位的成品 NAS,性价比很高,开箱即用。虽然很多人认为可用性不如群晖,但是我个人的使用不喜欢依赖某一个品牌的生态,大多是开源组装的,所以对我来说威联通和群晖没什么本质区别。慢慢的用途越来越多,这款 NAS 选用的 J3455 性能低下和硬盘无法休眠实在太吵成了我的困扰,特别在理清了我本身不需要任何成品 NAS 生态的需求后,自己组装一台 NAS 成了唯一选择。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/9qg5/>子线程更新 UI 全解</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2022-01-06</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/android/ class="text-gray-500 mr-1">Android</a>
2+
<a href=https://blog.io01.xyz/tags/%E6%BA%90%E7%A0%81/ class="text-gray-500 mr-1">源码</a></div></div><div class="summary-item prose max-w-none"><h2 id=子线程更新-ui-异常设计理念及简单源码解析>子线程更新 UI 异常设计理念及简单源码解析</h2><p>初学者可能会犯在子线程更新 UI 的错误,例如:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-kotlin data-lang=kotlin><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>thread { imageView.setBackgroundColor(<span style=color:#50fa7b>Color</span>.RED) }
33
</span></span></code></pre></div><p>一旦运行,应用会直接崩溃并抛出异常,这也是我们 Android 开发的一条铁律:<em>在子线程中不能更新 UI</em></p><p>那么为什么 Android 不让子线程更新 UI 呢?原因在于现在屏幕刷新率最低是 60Hz,意味着最多每 16ms 就会刷新一次屏幕,所以 UI 更新要尽可能快速,否则会丢帧导致卡顿。那么 UI 更新操作就不能加锁,频繁的加锁释放锁可能会延长 UI 渲染时间,但是不加锁如果允许子线程更新 UI 会导致多个线程对 UI 同时更新,造成线程不安全而导致 UI 最终效果无法想象,所以 Android 直接限制了子线程更新 UI,实际上不只是 Android 有这种限制,常见的 UI 框架基本都是单线程模型。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/hq29/>使用阿里云效同步 Git 仓库到 Github</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2021-11-29</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/%E6%9D%82%E9%A1%B9/ class="text-gray-500 mr-1">杂项</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>有时 Github 网络的不稳定性实在令人头痛,push 总是失败,而且需要把主仓库放在 Github 而非 Gitee 等国内平台,虽然可以通过配置代理进行,不过也可以曲线救国,选择通过 push 到国内代码管理平台,然后通过 CI 平台自动推送到 Github。</p><p>阿里云效综合了代码仓库和 CI 平台,私有代码仓库免费,免费构建时间足够支撑我们这点小事,并且执行环境可以选香港保证了能 push 到 GitHub,所以选择了阿里云效。</p><p>理论上所有能通过 <code>git push</code> 触发 CI(CI 的基本操作了)并且基础环境存在 <code>git</code> 而且网络良好的平台都可以按照本文方法进行,甚至有更简单的比如 Gitlab 直接支持推送到 Github,至于本文为何没有选用 Gitlab,纯属个人偏好。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/6fn7/>深入源码排查 FLAG_ACTIVITY_NEW_TASK 导致的 Activity 无法正常启动</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2021-09-16</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/%E6%BA%90%E7%A0%81/ class="text-gray-500 mr-1">源码</a></div></div><div class="summary-item prose max-w-none"><h2 id=引言>引言</h2><p>众所周知 Android 中 Activity 有四种启动模式,决定了是否创建新的 Activity 实例或复用当前实例。但是实际上 Activity 的启动十分复杂,不单单是 <code>android:launchMode</code> 就能决定的,多个 Intent Flag 都能改变启动的行为模式,除此之外还会根据 <code>android:taskAffinity</code> 的值来判断对应任务栈是否存在。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="flex flex-col mx-auto w-5/6 lg:w-3/4 xl:w-3/5 my-4"><h2 class="text-2xl font-semibold hover:underline hover:underline-offset-4 hover:decoration-2"><a href=https://blog.io01.xyz/posts/2aa2/>遵循 Google 应用指南的 Retrofit + Coroutine 封装</a></h2><div class="inline-flex my-1"><div class="inline-flex items-center"><svg viewBox="0 0 1 1" class="h-4 mr-1"><use href="#calendar"/></svg><span class=text-gray-500>2021-06-18</span></div><div class="inline-flex items-center ml-2"><svg viewBox="0 0 1 1" class="h-4 mx-1"><use href="#tags"/></svg><a href=https://blog.io01.xyz/tags/kotlin/ class="text-gray-500 mr-1">Kotlin</a>
44
<a href=https://blog.io01.xyz/tags/android/ class="text-gray-500 mr-1">Android</a></div></div><div class="summary-item prose max-w-none"><h2 id=前言>前言</h2><p>Retrofit 从 2.6.0 以后对 Kotlin 协程提供了原生支持,使得异步请求从写法上更像同步调用,配合 Google 出的 Jetpack 全家桶可以使得网络请求更加优雅简单,而且可以完全遵循 Google 给出的应用架构指南。</p><p>另外我们有一个更加多样的需求:我们的应用使用了多套服务接口,每套接口返回的参数模板不同,baseUrl 则更多样化,因此带来了更复杂的封装逻辑。</p></div><div class="bg-gray-200 w-full h-px mt-3"></div></div><div class="my-2 flex w-screen justify-center"><span class="mx-3 sm:mx-4 font-semibold text-sky-400 underline underline-offset-4 decoration-2">1</span>
55
<a href=/page/2/ class="mx-3 sm:mx-4 font-semibold text-gray-400 hover:text-sky-400 hover:underline hover:underline-offset-4 hover:decoration-2">2</a>

0 commit comments

Comments
 (0)