<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[blankmargin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/blankmargin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; blankmargin]]></copyright><item><title><![CDATA[插件化换肤原理——黑夜模式（深色模式）实现]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/142259302</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/142259302</guid><author>blankmargin</author><pubDate>Sat, 14 Sep 2024 15:21:35 +0800</pubDate><description><![CDATA[Android 插件化换肤之昼夜模式（深色模式）的原理以及应用]]></description><category></category></item><item><title><![CDATA[Glide生命周期监听原理以及简单应用&利用空Fragment代理Activity]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/141562953</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/141562953</guid><author>blankmargin</author><pubDate>Mon, 26 Aug 2024 14:20:24 +0800</pubDate><description><![CDATA[1.介绍Glide如何监听生命周期变化；2.使用空Fragment代理宿主Activity]]></description><category></category></item><item><title><![CDATA[Android OCR && 谷歌OCR TextRecognition用法介绍]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/140995072</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/140995072</guid><author>blankmargin</author><pubDate>Wed, 07 Aug 2024 16:33:32 +0800</pubDate><description><![CDATA[开源免费Android OCR ，使用谷歌 Text Recognition]]></description><category></category></item><item><title><![CDATA[Android截屏录屏MediaProjection分享]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/140927199</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/140927199</guid><author>blankmargin</author><pubDate>Mon, 05 Aug 2024 15:02:52 +0800</pubDate><description><![CDATA[Android屏幕捕获，截图和录屏方案的实现]]></description><category></category></item><item><title><![CDATA[Gradle系列(3)——Gradle extension（gradle扩展），如何自定义gradle扩展，AppPlugin，AppExtension原理]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/137831447</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/137831447</guid><author>blankmargin</author><pubDate>Tue, 16 Apr 2024 16:56:56 +0800</pubDate><description><![CDATA[AppExtension,LibraryExtension,AppPlugin,LibraryPlugin原理]]></description><category></category></item><item><title><![CDATA[Android插件化原理（三）——加载插件资源]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/137756942</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/137756942</guid><author>blankmargin</author><pubDate>Sun, 14 Apr 2024 22:46:26 +0800</pubDate><description><![CDATA[讲解插件化换肤原理，如何加载插件资源]]></description><category></category></item><item><title><![CDATA[Gradle系列(2)——如何自定以Gradle 插件]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/137599652</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/137599652</guid><author>blankmargin</author><pubDate>Wed, 10 Apr 2024 16:47:27 +0800</pubDate><description><![CDATA[如何实现自定义Gradle插件；kotlin+dsl+buildSrc+gradle plugin]]></description><category></category></item><item><title><![CDATA[maven-publish 如何发布项目到maven]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/136977835</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/136977835</guid><author>blankmargin</author><pubDate>Sun, 24 Mar 2024 00:59:17 +0800</pubDate><description><![CDATA[项目发布到maven仓库并使用]]></description><category></category></item><item><title><![CDATA[ViewStub原理，解决约束布局（ constraintLayout）ViewStub约束失效问题，解决ViewStub约束失效约束不起作用的问题]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/128158459</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/128158459</guid><author>blankmargin</author><pubDate>Sat, 03 Dec 2022 12:15:43 +0800</pubDate><description><![CDATA[ViewStub原理，解决约束布局（  constraintLayout）ViewStub约束失效问题，解决ViewStub约束失效约束不起作用的问题]]></description><category></category></item><item><title><![CDATA[Android插件化原理（二）—启动插件Activity]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/127992703</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/127992703</guid><author>blankmargin</author><pubDate>Sun, 27 Nov 2022 23:50:02 +0800</pubDate><description><![CDATA[插件化原理（二）——启动插件Activity]]></description><category></category></item><item><title><![CDATA[StartActivity原理（二），Android9.0 Activity启动原理]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/127643861</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/127643861</guid><author>blankmargin</author><pubDate>Wed, 23 Nov 2022 00:24:28 +0800</pubDate><description><![CDATA[Activity启动原理；startActivity原理]]></description><category></category></item><item><title><![CDATA[StartActivity原理（一）——Android9.0 Activity启动原理， pauseActivity原理]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/109321292</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/109321292</guid><author>blankmargin</author><pubDate>Tue, 22 Nov 2022 02:59:33 +0800</pubDate><description><![CDATA[Android9.0，Activity启动原理，startActivity原理]]></description><category></category></item><item><title><![CDATA[FrameWork-进程间通信之Binder机制，mmap原理]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/126787525</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/126787525</guid><author>blankmargin</author><pubDate>Fri, 09 Sep 2022 19:35:26 +0800</pubDate><description><![CDATA[进程间通信IPC-Binder]]></description><category></category></item><item><title><![CDATA[Android性能优化（二）--CPU和内存优化工具及方法]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/126600649</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/126600649</guid><author>blankmargin</author><pubDate>Tue, 30 Aug 2022 11:45:31 +0800</pubDate><description><![CDATA[Android性能优化]]></description><category></category></item><item><title><![CDATA[并发编程——ThreadLocal原理分析，Looper如何和线程关联]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/119334604</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/119334604</guid><author>blankmargin</author><pubDate>Wed, 04 Aug 2021 03:33:19 +0800</pubDate><description><![CDATA[说个特别尴尬的事情，最近刚辞职，上上周去极星面试。由于没有什么准备，加之很多东西很久之前看过都忘了，面试官问道我Looper和Thread是如何关联在一起即Looper.myLooper()如何获取到当前线程的looper的时候，我一时想不起来，竟然说了句“ThreadLocal内部维护了一个table，存储了关于线程和变量的key-value，类似map”，当时就觉得不对劲，面试官也就没有再多问，尴尬不已。不仅仅是这个，关于多线程方面的具体原理，cas，锁的原理，死锁……近几个月忘得一干二净，所以趁现在辞]]></description><category></category></item><item><title><![CDATA[什么是虚拟内存？虚拟内存的原理]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/118534348</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/118534348</guid><author>blankmargin</author><pubDate>Wed, 07 Jul 2021 00:52:11 +0800</pubDate><description><![CDATA[虚拟内存
最近看Binder原理的时候，讲到一个概念MMap，Memory Map，内存映射，一言蔽之就是物理内存和虚拟内存的映射（这个不是重点）。然而突然产生个疑问——什么是虚拟内存？我大概是傻了，横竖睡不着，坐起身来，看了很多帖子，字里行间写着两个大字“懵逼”。一方面我着急弄清楚Binder、mmap原理，一方面悬在我心里的疑问让我惶惶不可终日，左思右想，还是先弄清楚什么是虚拟内存，毕竟不积畦步无以至千里。

坎坷之路

什么是虚拟内存？我百度半天，帖子不少，或许是我愚钝理解能力不行，没有一篇帖子能告诉]]></description><category></category></item><item><title><![CDATA[startService和bindService两种使用方式， 隐式启动、显式启动两种启动方式及生命周期]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/117969651</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/117969651</guid><author>blankmargin</author><pubDate>Mon, 21 Jun 2021 19:22:25 +0800</pubDate><description><![CDATA[Service的两种使用方式

本文介绍的是app A 启动 app B的服务的方式

1. 首先，准备app B：

首先继承系统Service，实现自己的Service；

public class SimpleSnapService extends Service {
    private static final String TAG = "SimpleSnapService";

    @Nullable
    @Override
    public IBinder onBind(Inte]]></description><category></category></item><item><title><![CDATA[HashMap(Java8)原理解析&&HashMap扩容机制]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/108479925</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/108479925</guid><author>blankmargin</author><pubDate>Tue, 15 Sep 2020 17:41:22 +0800</pubDate><description><![CDATA[HashMap核心变量
  /**
     * The default initial capacity - MUST be a power of two.
     * HashMap默认容量（数组长度），这个数指必须时2的n次幂
     */
    static final int DEFAULT_INITIAL_CAPACITY = 1 &lt;&lt; 4; // aka 16

    /**
     * The maximum capacity, used if a higher val]]></description><category></category></item><item><title><![CDATA[Android性能优化（一）—— 启动优化，冷启动，热启动，温启动]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/108525827</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/108525827</guid><author>blankmargin</author><pubDate>Fri, 11 Sep 2020 03:49:09 +0800</pubDate><description><![CDATA[标签  ： Android架构师之路

APP启动方式
App启动方式分三种：冷启动（cold start）、热启动（hot start）、温启动（warm start）
▲ 冷启动

系统不存在App进程（APP首次启动或APP被完全杀死）时启动APP
此时，APP的启动将经历两个阶段：

第一阶段

1.加载并启动app;
2.app启动后，第一时间为app显示一个空白的window；
3.创建app进程

第二阶段
系统一旦创建了app进程，app进程就要负责做以下的任务：

1.创建app对象；
2]]></description><category></category></item><item><title><![CDATA[再论AsyncTask原理解析]]></title><link>https://blog.youkuaiyun.com/blankmargin/article/details/108266119</link><guid>https://blog.youkuaiyun.com/blankmargin/article/details/108266119</guid><author>blankmargin</author><pubDate>Thu, 27 Aug 2020 21:15:47 +0800</pubDate><description><![CDATA[说来有些惭愧，AsyncTask 这么一个当初入门就要学习的东西，这么久来我竟然没有深入了解过它的原理，因为16年从入门的时候就被告知它会引起内存泄漏。正式做项目以来，更是从来没有用过它，所以也从来没有想过了解它的原理。直到前几天，有大佬问起我它的原理，我才发现我对它的了解仅限于下面那段描述性的话，于是决定好好了解一下它。
仔细想想，真的十分可笑，当初带我入行的大佬，我认识他的时候，我现在工作年限和当时的他一样。然而真相是，除了工作年限跟他一样，技术能里却差了十万八千里，根本不在一个次元上????。最近一直]]></description><category></category></item></channel></rss>