<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Oliver Lau的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Oliver__Lau</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Oliver__Lau]]></copyright><item><title><![CDATA[ConstraintLayout详解]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/156640842</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/156640842</guid><author>Oliver__Lau</author><pubDate>Tue, 06 Jan 2026 10:43:52 +0800</pubDate><description><![CDATA[xml添加Guideline控件,其大部分属性如layout_width都不会生效，通过layout_constraintGuide_begin或者layout_constraintGuide_end设置两侧间距，或者layout_constraintGuide_percent设置父控件百分比，通过orientation设置辅助线是水平或者竖直辅助线。比如要设置layout_marginLeft，则需要有对应的layout_constraintLeft_*。]]></description><category></category></item><item><title><![CDATA[Android WorkManager]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/140430721</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/140430721</guid><author>Oliver__Lau</author><pubDate>Mon, 15 Jul 2024 10:33:02 +0800</pubDate><description><![CDATA[WorkRequest可以是OneTimeWorkRequest（一次性任务）或PeriodicWorkRequest（周期性任务，周期性任务的时间间隔时间不能小于15分钟，源码设置最小15分钟，小于 15 分钟的定期任务已经被强制调整为 15 分钟执行，避免频繁的后台定时任务对前台应用的影响，规避了 API 的非法滥用：）。Worker：实际执行工作的对象，开发者需要创建自己的Worker来执行具体的任务，我们要执行的具体任务，需要继承Worker,重写doWork方法，然后在里面写具体的逻辑。]]></description><category></category></item><item><title><![CDATA[Android 闹钟服务AlarmManager]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/119322739</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/119322739</guid><author>Oliver__Lau</author><pubDate>Mon, 15 Jul 2024 10:04:00 +0800</pubDate><description><![CDATA[一、通常我们实现定时任务有三种方式：

    Timer，有一个明显的问题，它并不太适合用于需要长期在后台运行的定时任务。我们都知道，为了能让电池更加耐用，每种手机都会有自己的休眠策略，Android手机就会在长时间不操作的情况下自动让CPU进入睡眠状态，这就有可能导致Timer中的定时任务无法正常运行。

    Hnadler，Handler的postDelay方法也可以实现定时操作，它同样也是不靠谱的，因为默认Hnadler依赖于线程（main线程或者子线程），所以只要进程被杀死，所...]]></description><category></category></item><item><title><![CDATA[Android 权限]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/120524031</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/120524031</guid><author>Oliver__Lau</author><pubDate>Tue, 28 Sep 2021 10:30:29 +0800</pubDate><description><![CDATA[android.permission.EXPAND_STATUS_BAR允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序android.permission.FACTORY_TEST作为一个工厂测试程序，运行在root用户android.permission.FLASHLIGHT访问闪光灯,android开发网提示HTC Dream不包含闪光灯android.permission.FORCE_BACK允许程序强行一个后退操作是否在顶层act...]]></description><category></category></item><item><title><![CDATA[Android Intent常用flags]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/119416411</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/119416411</guid><author>Oliver__Lau</author><pubDate>Thu, 05 Aug 2021 14:07:31 +0800</pubDate><description><![CDATA[1、FLAG_ACTIVITY_NEW_TASK：根据Activity 的affinity（一个app系统默认affinity的值为包名，task自身的affinity的值取决于根activity的affinity，相同affinity的activity属于同一个task）寻找task 栈，如果一个task 的 affinity与 activity 的 affinity的相同，则Activity会压入栈中。如果没有找到相同的，则新建立栈，并且把activity压入栈中。

2.FLAG_ACTIVITY_C]]></description><category></category></item><item><title><![CDATA[Android 闹钟服务AlarmManager]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/119322983</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/119322983</guid><author>Oliver__Lau</author><pubDate>Mon, 02 Aug 2021 13:06:23 +0800</pubDate><description><![CDATA[一、通常我们实现定时任务有三种方式：

    Timer，有一个明显的问题，它并不太适合用于需要长期在后台运行的定时任务。我们都知道，为了能让电池更加耐用，每种手机都会有自己的休眠策略，Android手机就会在长时间不操作的情况下自动让CPU进入睡眠状态，这就有可能导致Timer中的定时任务无法正常运行。

    Hnadler，Handler的postDelay方法也可以实现定时操作，它同样也是不靠谱的，因为默认Hnadler依赖于线程（main线程或者子线程），所以只要进程被杀死，所...]]></description><category></category></item><item><title><![CDATA[Git 修改commit提交信息]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/115519625</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/115519625</guid><author>Oliver__Lau</author><pubDate>Thu, 08 Apr 2021 14:40:06 +0800</pubDate><description><![CDATA[修改commit提交信息分为两种情况，一种是commit到本地版本库，既push到远程之前，一种是push到远程之后

一、commit到本地版本库

  1、命令行执行：git commit --amend，git commit –amend既可以对上次提交的内容进行修改，也可以修改提交说明

  2、利用vim语法，点击i进入编辑模式，修改对应文本内容

  3、点击Esc退出编辑模式

  4、按键:wq强制退出

二、push到远程之后

  1、git lo...]]></description><category></category></item><item><title><![CDATA[Android 获取屏幕宽高]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/105853972</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/105853972</guid><author>Oliver__Lau</author><pubDate>Thu, 30 Apr 2020 09:07:38 +0800</pubDate><description><![CDATA[获取屏幕宽高的方法如下：

方法一：
   WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
   int width = wm.getDefaultDisplay().getWidth();
   int height = wm.getDefaultDispl...]]></description><category></category></item><item><title><![CDATA[Android PorterDuff.Mode]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/105810331</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/105810331</guid><author>Oliver__Lau</author><pubDate>Tue, 28 Apr 2020 11:53:35 +0800</pubDate><description><![CDATA[做过图形图像处理coding的Android程序员一定用过或了解过PorterDuff.Mode这个枚举变量中的某些值，对此了解不多理解不深刻的时候是不是会很纠结到底该用那个模式呢？至少不能快速准确地用到恰当的模式，那么PorterDuff.Mode究竟是什么，它的各个枚举值有什么作用呢？这里我整理一下笔记，加深理解。

PorterDuff.Mode是什么




public Xfermod...]]></description><category></category></item><item><title><![CDATA[Android 获取唯一标识]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/102785978</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/102785978</guid><author>Oliver__Lau</author><pubDate>Mon, 28 Oct 2019 18:18:28 +0800</pubDate><description><![CDATA[一、前言

app开发过程中，需要对本地数据进行加密，因此了解了app所能获取到的一些标示。

常见唯一标示
imei

Android_id

mac地址

Installtion ID : UUID

Pseudo-Unique ID

二、IMEI
需要获取权限
&lt;uses-permission android:name="android.permission.READ_PHONE_S...]]></description><category></category></item><item><title><![CDATA[Android 沉浸式开发]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/102704714</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/102704714</guid><author>Oliver__Lau</author><pubDate>Wed, 23 Oct 2019 17:18:46 +0800</pubDate><description><![CDATA[目录

一、前言

二、5.0沉浸实现

三、6.0状态栏文字颜色变化

四、fitsSystemWindows

一、前言

   从Android5.0开始，加入了一个重要的属性和方法android:statusBarColor（对应方法为 setStatusBarColor），通过这个方法我们就可以轻松实现沉浸式。也就是说，从Android5.0开始，系统才真正的支持沉浸式，所以...]]></description><category></category></item><item><title><![CDATA[获取软键盘高度]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/88228766</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/88228766</guid><author>Oliver__Lau</author><pubDate>Wed, 06 Mar 2019 12:16:19 +0800</pubDate><description><![CDATA[private static int getDecorViewInvisibleHeight(final Activity activity) {
        final View decorView = activity.getWindow().getDecorView();
        if (decorView == null)
            return sDecorV...]]></description><category></category></item><item><title><![CDATA[Android studio debug]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/85159842</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/85159842</guid><author>Oliver__Lau</author><pubDate>Fri, 21 Dec 2018 12:01:57 +0800</pubDate><description><![CDATA[今天的文章，我要记录的就是有关调试的技巧，不论你是否已经掌握，都值得一看。对了，文章的截图是我利用下班时间整理的，所以一般会很晚回去，到家都是十点半左右，因为时间还是比较仓促的，有些地方遗漏或者不正确的，欢迎指正！下面进入正题。

1. 调试窗口
先来一张大图，途中详细标注了调试窗口中，各个常用的功能区域和按键。如果你觉得图片看不清，可以选择在单独的标签页打开，然后放大看（实在不行，可以留下邮箱我...]]></description><category></category></item><item><title><![CDATA[PendingIntent第四个参数flags在Notification中的不同作用]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/81143603</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/81143603</guid><author>Oliver__Lau</author><pubDate>Sat, 21 Jul 2018 12:57:11 +0800</pubDate><description><![CDATA[PendingIntent第四个参数为int类型的flags，首先看一下官方文档对它的描述：

flags May be FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT, or any of the flags as supported by Intent.fillIn() to control whi...]]></description><category></category></item><item><title><![CDATA[Android 31个开发者工具]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/80939827</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/80939827</guid><author>Oliver__Lau</author><pubDate>Fri, 06 Jul 2018 13:54:34 +0800</pubDate><description><![CDATA[文中部分工具是收费的，但是绝大多数都是免费的。FlowUp这是一个帮助你跟踪app整体性能的工具，深入分析关键的性能数据如FPS, 内存, CPU, 磁盘, 等等。FlowUp根据用户数量收费。Stetho由Facebook开发的一个强大的开源Android debug平台，Stetho让原生 Android app的debug跟使用Chrome的开发者工具debug web页面一样简单。它能让你...]]></description><category></category></item><item><title><![CDATA[android 5.0系统新增默认颜色]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/80336921</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/80336921</guid><author>Oliver__Lau</author><pubDate>Wed, 16 May 2018 14:50:03 +0800</pubDate><description><![CDATA[伴随着Android5.0的发布也更新了support-v7-appcompat 到V21，其中增加了ToolBar、recyclerview、cardview等控件。Android5.0对改变APP样式下了不小的功夫，写法也和以前不一样了，下面先简单介绍一下colorAccent,colorPrimary,colorPrimaryDark……的作用：1.colorPrimary 应用的主要色调，...]]></description><category></category></item><item><title><![CDATA[PNG-8、24、32区别介绍]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/79131910</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/79131910</guid><author>Oliver__Lau</author><pubDate>Mon, 22 Jan 2018 18:00:27 +0800</pubDate><description><![CDATA[知名图片压缩格式PNG，在使用大部分制图软件导出时可以选择PNG-8，PNG-24或者PNG-32。本文将介绍这三种PNG之间有什么不同。
图片的编码
首先要是想要完整的保存一张图片上的全部信息，自然是要把每个像素点的色值全部记录下来。按照这个方式来编码图片，那么图片的大小就是：
像素数量 × 每个像素包含信息的字节长度

例如一张1080×720大小的图片，假设每个像素的深度（所占的bi]]></description><category></category></item><item><title><![CDATA[Android WebView 的缓存机制]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/78684155</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/78684155</guid><author>Oliver__Lau</author><pubDate>Fri, 01 Dec 2017 10:41:32 +0800</pubDate><description><![CDATA[前言

由于H5具备 开发周期短、灵活性好 的特点，所以现在 Android
 App大多嵌入了 Android Webview 组件进行 Hybrid 开发但我知道你一定在烦恼 Android Webview 的性能问题，特别突出的是：加载速度慢 & 消耗流量今天，我将针对 Android Webview 的性能问题，提出一些有效解决方案。


目录




1. Andr]]></description><category></category></item><item><title><![CDATA[Android 属性动画详解]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/78684028</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/78684028</guid><author>Oliver__Lau</author><pubDate>Fri, 01 Dec 2017 10:31:17 +0800</pubDate><description><![CDATA[前言

动画的使用 是 Android 开发中常用的知识本文将详细介绍 Android 动画中 属性动画的原理 & 使用




相关文章阅读： 
1. Android 动画系列 
Android 动画：手把手教你使用 补间动画 
Android 动画：你真的会使用插值器与估值器吗？（含详细实例教学） 
2. 自定义View的原理，请参考我写的文章： 
（1）自定义View]]></description><category></category></item><item><title><![CDATA[Android RxJava 操作符详解系列：过滤操作符]]></title><link>https://blog.youkuaiyun.com/Oliver__Lau/article/details/78683818</link><guid>https://blog.youkuaiyun.com/Oliver__Lau/article/details/78683818</guid><author>Oliver__Lau</author><pubDate>Fri, 01 Dec 2017 10:15:32 +0800</pubDate><description><![CDATA[前言

Rxjava，由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点，深受各大 Android开发者的欢迎。




如果还不了解 RxJava，请看文章：Android：这是一篇
 清晰 & 易懂的Rxjava 入门教程





RxJava如此受欢迎的原因，在于其提供了丰富 & 功能强大的操作符，几乎能完成所有的功能需求今天，我将为大家详细介绍RxJav]]></description><category></category></item></channel></rss>