<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[liken的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/lihenair</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; lihenair]]></copyright><item><title><![CDATA[协程Coroutine，Dispatcher]]></title><link>https://blog.csdn.net/lihenair/article/details/122565707</link><guid>https://blog.csdn.net/lihenair/article/details/122565707</guid><author>lihenair</author><pubDate>Tue, 18 Jan 2022 18:23:11 +0800</pubDate><description><![CDATA[协程Coroutine，Dispatcher


]]></description><category></category></item><item><title><![CDATA[Kotlin Contracts]]></title><link>https://blog.csdn.net/lihenair/article/details/115268441</link><guid>https://blog.csdn.net/lihenair/article/details/115268441</guid><author>lihenair</author><pubDate>Sun, 28 Mar 2021 13:55:03 +0800</pubDate><description><![CDATA[文章链接
By baeldung
1. 概览
在本教程中，我们将讨论Kotlin Contracts。 它的语法还不稳定，但是二进制实现是稳定的，并且Kotlin stdlib已经在使用了。
基本上，Kotlin contracts是一种通知编译器有关函数行为的方式。
2. Maven配置
Kotlin1.3版本引入此功能，所以我们需要使用1.3或更高的版本。本教程中，我们使用最新版本-1.3.0。
请参考Kotlin介绍获取更多关于配置的细节。
3. Contracts的目的
虽然像编译器一样聪明，但它不]]></description><category></category></item><item><title><![CDATA[动态调整ConstaintLayout元素位置]]></title><link>https://blog.csdn.net/lihenair/article/details/110276398</link><guid>https://blog.csdn.net/lihenair/article/details/110276398</guid><author>lihenair</author><pubDate>Sat, 28 Nov 2020 22:38:33 +0800</pubDate><description><![CDATA[背景
最近一个需求需要动态添加删除ConstraintLayout里的元素，一时不知道如何处理。虽然ConstraintLayout确实减少了层级，提升了绘制效率，但对于动态增删却一直没有尝试过。借着这个需求也好好调研了下ConstraintLayout的一些相关属性。
按照以往的经验，增删view应该也跟RelativityLayout或者LinearLayout一样，直接添加就行了。不过在查阅了开发文档和Stack Overflow之后，发现并不是这么简单。这里有个核心的类ConstraintSet，控]]></description><category></category></item><item><title><![CDATA[Constraintlayout中实现view的压盖或负margin]]></title><link>https://blog.csdn.net/lihenair/article/details/90606577</link><guid>https://blog.csdn.net/lihenair/article/details/90606577</guid><author>lihenair</author><pubDate>Mon, 27 May 2019 16:56:54 +0800</pubDate><description><![CDATA[需要在ConstraintLayout中实现View的压盖，搜到发现ConstraintLayout不支持负的margin，不能像RelativeLayout那样方便的实现。
google+stackoverflow
解决方案如下：
How to achieve overlap/negative margin on Constraint Layout?

&lt;?xml version="1.0...]]></description><category></category></item><item><title><![CDATA[[译]如果在Flutter中添加图片]]></title><link>https://blog.csdn.net/lihenair/article/details/86742391</link><guid>https://blog.csdn.net/lihenair/article/details/86742391</guid><author>lihenair</author><pubDate>Fri, 01 Feb 2019 16:21:59 +0800</pubDate><description><![CDATA[原文链接：https://stackoverflow.com/questions/50903106/add-image-in-flutter-app
创建assets/images文件夹

assets文件夹位于工程的根目录，与pubspec.yaml文件同级。
Android Studio中，可以右键单击项目视图。
不需要命名为asstes或者images，甚至不需要把images弄成子文件夹。...]]></description><category></category></item><item><title><![CDATA[[译]如何在应用内部修改字体大小]]></title><link>https://blog.csdn.net/lihenair/article/details/83144197</link><guid>https://blog.csdn.net/lihenair/article/details/83144197</guid><author>lihenair</author><pubDate>Thu, 18 Oct 2018 11:40:36 +0800</pubDate><description><![CDATA[最开始看到这个需求，首先想到的是修改每个文字显示组件的textsize。看了下项目，那是相当的多啊。难道就没有一种简洁的方式么？
看了下系统的显示设置功能，有个字体大小调整，设置一下就修改了系统的字体大小。既然系统可以，那就应该有参数可以修改应用的字体大小。
google+stackoverflow
https://stackoverflow.com/questions/6786439/how-t...]]></description><category></category></item><item><title><![CDATA[react-native 构建工程注意点]]></title><link>https://blog.csdn.net/lihenair/article/details/82900147</link><guid>https://blog.csdn.net/lihenair/article/details/82900147</guid><author>lihenair</author><pubDate>Sat, 29 Sep 2018 17:06:51 +0800</pubDate><description><![CDATA[react-native更新到0.57版本之后，新建工程总会出现无法安装js文件问题。
具体表现是

根据网上的搜索，可以使用如下步骤解决：

react-native init project
cd project
npm add @babel/runtime
npm install
mkdir -p android/app/src/main/assets
react-native run-an...]]></description><category></category></item><item><title><![CDATA[图解HTTP笔记(待补充)]]></title><link>https://blog.csdn.net/lihenair/article/details/82865886</link><guid>https://blog.csdn.net/lihenair/article/details/82865886</guid><author>lihenair</author><pubDate>Thu, 27 Sep 2018 13:28:55 +0800</pubDate><description><![CDATA[http


http报文：报文首部 cr+lf 报文主体



请求报文：请求行 请求首部 通用首部 实体首部




方法
说明
支持的HTTP协议版本




GET
获取资源
接收的请求正在处理


POST
传输实体主体
1.0、1.1


PUT
传输文件
1.0、1.1


HEAD
获得报文首部
1.0、1.1


DELETE
删除文件
1.0、1.1


OPTIONS
询问支...]]></description><category></category></item><item><title><![CDATA[Configuration on demand is not supported by the current version of the Android Gradle plugin]]></title><link>https://blog.csdn.net/lihenair/article/details/82842773</link><guid>https://blog.csdn.net/lihenair/article/details/82842773</guid><author>lihenair</author><pubDate>Tue, 25 Sep 2018 17:55:24 +0800</pubDate><description><![CDATA[Configuration on demand is not supported by the current version of the Android Gradle plugin
问题
gradle-wrapper.properties里升级了gradle版本后(4.6-&amp;amp;gt;4.10)，代码编译不过去，报Configuration on demand is not supported b...]]></description><category></category></item><item><title><![CDATA[[原]HashMap结构]]></title><link>https://blog.csdn.net/lihenair/article/details/80855752</link><guid>https://blog.csdn.net/lihenair/article/details/80855752</guid><author>lihenair</author><pubDate>Fri, 29 Jun 2018 13:56:51 +0800</pubDate><description><![CDATA[总结一下，以备后用 
]]></description><category></category></item><item><title><![CDATA[[译]正确获取约束 - ConstraintLayout]]></title><link>https://blog.csdn.net/lihenair/article/details/80800831</link><guid>https://blog.csdn.net/lihenair/article/details/80800831</guid><author>lihenair</author><pubDate>Mon, 25 Jun 2018 13:46:44 +0800</pubDate><description><![CDATA[正确获取约束 - ConstraintLayout 
原文链接:https://proandroiddev.com/getting-your-constraints-right-constraintlayout-786254ed1166



Constraintlayout文档描述：


  一个ConstraintLayout是一个ViewGroup，它允许以灵活的方式调整组件的位置和大小。
...]]></description><category></category></item><item><title><![CDATA[修复升级ndk到17.0.4754217编译so失败问题]]></title><link>https://blog.csdn.net/lihenair/article/details/80454659</link><guid>https://blog.csdn.net/lihenair/article/details/80454659</guid><author>lihenair</author><pubDate>Fri, 25 May 2018 17:25:37 +0800</pubDate><description><![CDATA[今天编译工程总过不去，查看失败原因，因为ndk的mips编译不过去。

A problem occurred starting process ‘command ‘/Users/didi/Library/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin/mips64el-l...]]></description><category></category></item><item><title><![CDATA[[译]如何检查键盘是否弹起]]></title><link>https://blog.csdn.net/lihenair/article/details/80350702</link><guid>https://blog.csdn.net/lihenair/article/details/80350702</guid><author>lihenair</author><pubDate>Thu, 17 May 2018 14:44:16 +0800</pubDate><description><![CDATA[原文链接: https://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android?page=1&amp;amp;amp;tab=votes#tab-top

废话不说，直接上代码



方法一

第一步：获取Activity布局的根布局id，比如R.id.root，使用它获得当前视图的...]]></description><category></category></item><item><title><![CDATA[[译]Kotlin的属性委托和惰性初始化是如何工作]]></title><link>https://blog.csdn.net/lihenair/article/details/80321653</link><guid>https://blog.csdn.net/lihenair/article/details/80321653</guid><author>lihenair</author><pubDate>Tue, 15 May 2018 13:39:16 +0800</pubDate><description><![CDATA[原文链接:https://medium.com/til-kotlin/how-kotlins-delegated-properties-and-lazy-initialization-work-552cbad8be60



Kotlin的属性委托和惰性初始化是如何工作



访问属性在支持面向对象范式的编程语言中非常常见。Kotlin也提供了许多类似的方法，by lazy进行惰性初始化就是一个很...]]></description><category></category></item><item><title><![CDATA[[译]开发工具的No-op版本]]></title><link>https://blog.csdn.net/lihenair/article/details/80242745</link><guid>https://blog.csdn.net/lihenair/article/details/80242745</guid><author>lihenair</author><pubDate>Tue, 08 May 2018 17:15:04 +0800</pubDate><description><![CDATA[原文链接：https://medium.com/@orhanobut/no-op-versions-for-dev-tools-b0a865934398



开发工具的No-op版本


  “在计算机科学中，NOP或NOOP（无操作的简称）是汇编语言指令，编程语言语句或计算机协议命令，它什么都不做。”
  
  wiki


对于每个拉取请求，我们总结了构建信息以及可能的更改，并用电子邮件发送...]]></description><category></category></item><item><title><![CDATA[[译]改善ProGuard名称混淆]]></title><link>https://blog.csdn.net/lihenair/article/details/79879144</link><guid>https://blog.csdn.net/lihenair/article/details/79879144</guid><author>lihenair</author><pubDate>Tue, 10 Apr 2018 11:55:13 +0800</pubDate><description><![CDATA[原文链接：https://proandroiddev.com/improving-proguard-name-obfuscation-83b27b34c52a



改进ProGuard名称混淆

文中，我将展示如何加强ProGuard的名称模糊处理，使攻击者难以对代码进行逆向工程，以及如何有助于防止不正确混淆造成的许多错误。

告诉你一个秘密：ProGuard实际上是一个代码优化器。其中一个优化...]]></description><category></category></item><item><title><![CDATA[View刷新过程Java-JNI]]></title><link>https://blog.csdn.net/lihenair/article/details/79810979</link><guid>https://blog.csdn.net/lihenair/article/details/79810979</guid><author>lihenair</author><pubDate>Tue, 03 Apr 2018 23:31:51 +0800</pubDate><description><![CDATA[View刷新过程

这里只讨论Java&amp;lt;-&amp;gt;JNI之间的刷新，仅限CPU部分。GPU和Display部分需要看C++源码，暂时忽略


View 
invalidate()
requestFocus()
ViewParent 
invalidateChild()
ViewGroup 
invalidateChildInParent()
ViewRootImpl 
invalidate(...]]></description><category></category></item><item><title><![CDATA[Android DataBinding错误记录]]></title><link>https://blog.csdn.net/lihenair/article/details/79465085</link><guid>https://blog.csdn.net/lihenair/article/details/79465085</guid><author>lihenair</author><pubDate>Tue, 06 Mar 2018 23:02:11 +0800</pubDate><description><![CDATA[&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;layout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot; 错误1
    android:layout_height=&quot;match_parent&]]></description><category></category></item><item><title><![CDATA[开启Android Nougat 'Charles'ing SSL网络]]></title><link>https://blog.csdn.net/lihenair/article/details/79313596</link><guid>https://blog.csdn.net/lihenair/article/details/79313596</guid><author>lihenair</author><pubDate>Sun, 11 Feb 2018 22:12:35 +0800</pubDate><description><![CDATA[开启Android Nougat ‘Charles’ing SSL网络

原文链接:https://medium.com/@elye.project/android-nougat-charlesing-ssl-network-efa0951e66de



如果你的应用与后端网络交互，你可能需要使用Charles网络调试代理工具。这是拦截网络并执行所需跟踪甚至更改它的一种非常方便的方法。

它也适...]]></description><category></category></item><item><title><![CDATA[view同时更新backgroundcolor和corner]]></title><link>https://blog.csdn.net/lihenair/article/details/79065582</link><guid>https://blog.csdn.net/lihenair/article/details/79065582</guid><author>lihenair</author><pubDate>Mon, 15 Jan 2018 16:01:43 +0800</pubDate><description><![CDATA[因为corner在view里不是一个属性，不像iOS那样可以直接修改，所以需要适当的修改一笑已经有的实现。 
Step 1



// 自定义属性，表示背景中的corner
public void setRadius(int radius) {
    this.radius = radius;
}

@Override
public void setBackgroundColor(int col]]></description><category></category></item></channel></rss>