<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>willkernel</title>
  
  <subtitle>Lifelong learning</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://willkernel.github.io/"/>
  <updated>2018-04-19T16:41:06.057Z</updated>
  <id>http://willkernel.github.io/</id>
  
  <author>
    <name>willkernel</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>C++(一)</title>
    <link href="http://willkernel.github.io/2018/04/08/CPP-%E4%B8%80/"/>
    <id>http://willkernel.github.io/2018/04/08/CPP-一/</id>
    <published>2018-04-08T00:16:00.000Z</published>
    <updated>2018-04-19T16:41:06.057Z</updated>
    
    <summary type="html">
    
      &lt;h4 id=&quot;简介&quot;&gt;&lt;a href=&quot;#简介&quot; class=&quot;headerlink&quot; title=&quot;简介&quot;&gt;&lt;/a&gt;简介&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言，支持过程化编程、面向对象编程和泛型编程&lt;br&gt;C++ 被认为是一种中级语言，它综合了高级语言和低级语言的特点&lt;br&gt;C++ 是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善C,是 C 的一个超集，事实上，任何合法的 C 程序都是合法的 C++ 程序&lt;br&gt;注意：使用静态类型的编程语言是在编译时执行类型检查，而不是在运行时执行类型检查&lt;br&gt;2014    ISO/IEC 14882:2014    C++14    第四个C++标准&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;C++ 完全支持面向对象的程序设计，包括面向对象开发的四大特性：&lt;br&gt;封装&lt;br&gt;抽象&lt;br&gt;继承&lt;br&gt;多态&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;标准库&lt;br&gt;标准的 C++ 由三个重要部分组成：&lt;br&gt;核心语言，提供了所有构件块，包括变量、数据类型和常量，等等。&lt;br&gt;C++ 标准库，提供了大量的函数，用于操作文件、字符串等。&lt;br&gt;标准模板库（STL），提供了大量的方法，用于操作数据结构等&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sourceforge.net/projects/mingw/files/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MinGW&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;语法&quot;&gt;&lt;a href=&quot;#语法&quot; class=&quot;headerlink&quot; title=&quot;语法&quot;&gt;&lt;/a&gt;语法&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;程序结构&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;using namespace std;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;// main() 是程序开始执行的地方 ，单行注释&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;int main()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   cout &amp;lt;&amp;lt; &amp;quot;Hello World&amp;quot;; // 输出 Hello World&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   return 0;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;包含头文件&lt;code&gt;&amp;lt;iostream&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;using namespace std;&lt;/code&gt;使用std命名空间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int main()&lt;/code&gt;主函数，程序从这里开始执行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;return 0&lt;/code&gt; 终止main()函数，返回0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;编译执行&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ touch hello.cpp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ g++ hello.cpp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ./a.exe&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Hello World&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="C++" scheme="http://willkernel.github.io/categories/C/"/>
    
    
  </entry>
  
  <entry>
    <title>SQLite(三)</title>
    <link href="http://willkernel.github.io/2018/04/08/SQLite-%E4%B8%89/"/>
    <id>http://willkernel.github.io/2018/04/08/SQLite-三/</id>
    <published>2018-04-07T16:07:00.000Z</published>
    <updated>2018-04-07T16:08:11.257Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;h4 id=&quot;SQLite-Java&quot;&gt;&lt;a href=&quot;#SQLite-Java&quot; class=&quot;headerlink&quot; title=&quot;SQLite Java&quot;&gt;&lt;/a&gt;SQLite
        
      
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
      <category term="SQLite" scheme="http://willkernel.github.io/tags/SQLite/"/>
    
  </entry>
  
  <entry>
    <title>Source Insight 使用</title>
    <link href="http://willkernel.github.io/2018/04/07/Source-Insight-%E4%BD%BF%E7%94%A8/"/>
    <id>http://willkernel.github.io/2018/04/07/Source-Insight-使用/</id>
    <published>2018-04-07T13:36:00.000Z</published>
    <updated>2018-04-07T14:45:48.622Z</updated>
    
    <summary type="html">
    
      &lt;ul&gt;
&lt;li&gt;New project&lt;img src=&quot;http://p4n1d4izv.bkt.clouddn.com/images/srcinsight-1.png&quot;&gt;&lt;/li&gt;
&lt;li&gt;Add all&lt;img src=&quot;http://p4n1d4izv.bkt.clouddn.com/images/srcinsight-2.png&quot;&gt;
&lt;img src=&quot;http://p4n1d4izv.bkt.clouddn.com/images/srcinsight-3.png&quot;&gt;&lt;/li&gt;
&lt;li&gt;close&lt;img src=&quot;http://p4n1d4izv.bkt.clouddn.com/images/srcinsight-4.png&quot;&gt;
    
    </summary>
    
      <category term="Tools" scheme="http://willkernel.github.io/categories/Tools/"/>
    
    
      <category term="Source Insight" scheme="http://willkernel.github.io/tags/Source-Insight/"/>
    
  </entry>
  
  <entry>
    <title>Java 小知识</title>
    <link href="http://willkernel.github.io/2018/04/02/Java-%E5%B0%8F%E7%9F%A5%E8%AF%86/"/>
    <id>http://willkernel.github.io/2018/04/02/Java-小知识/</id>
    <published>2018-04-02T15:53:00.000Z</published>
    <updated>2018-04-02T16:31:31.061Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;transient&lt;/code&gt; vs
        
      
    
    </summary>
    
      <category term="Java" scheme="http://willkernel.github.io/categories/Java/"/>
    
    
  </entry>
  
  <entry>
    <title>Window和WindowManager</title>
    <link href="http://willkernel.github.io/2018/04/02/Window%E5%92%8CWindowManager/"/>
    <id>http://willkernel.github.io/2018/04/02/Window和WindowManager/</id>
    <published>2018-04-02T15:17:00.000Z</published>
    <updated>2018-04-02T18:02:20.763Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;ul&gt;
&lt;li&gt;&lt;p&gt;Window和WindowManager&lt;br&gt;Window表示一个窗口，可以实现在桌面上显示悬浮窗，Window是一个抽象类，具体实现是PhoneWindow。通过WindowManager创建Window，WindowManager是外界访问Windo
        
      
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
  </entry>
  
  <entry>
    <title>SQLite(二)</title>
    <link href="http://willkernel.github.io/2018/04/02/SQLite-%E4%BA%8C/"/>
    <id>http://willkernel.github.io/2018/04/02/SQLite-二/</id>
    <published>2018-04-02T04:08:00.000Z</published>
    <updated>2018-04-07T16:07:56.843Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;h4 id=&quot;数据库操作&quot;&gt;&lt;a href=&quot;#数据库操作&quot; class=&quot;headerlink&quot; title=&quot;数据库操作&quot;&gt;&lt;/a&gt;数据库操作&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;创建&lt;/p&gt;
&lt;figure class=&quot;highlight
        
      
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
      <category term="SQLite" scheme="http://willkernel.github.io/tags/SQLite/"/>
    
  </entry>
  
  <entry>
    <title>SQLite(一)</title>
    <link href="http://willkernel.github.io/2018/03/30/SQLite-%E4%B8%80/"/>
    <id>http://willkernel.github.io/2018/03/30/SQLite-一/</id>
    <published>2018-03-30T07:56:00.000Z</published>
    <updated>2018-04-02T04:06:25.882Z</updated>
    
    <summary type="html">
    
      &lt;h4 id=&quot;简介&quot;&gt;&lt;a href=&quot;#简介&quot; class=&quot;headerlink&quot; title=&quot;简介&quot;&gt;&lt;/a&gt;简介&lt;/h4&gt;&lt;p&gt;SQLite特点：无服务器、零配置、事务性的 SQL 数据库引擎，SQLite 引擎不是一个独立的进程，可以按应用程序需求进行静态或动态连接；非常小轻量级，兼容ACID原则，是进程或线程安全的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ACID是一组强调高可靠性的数据库系统设计原则，在软件崩溃甚至是硬件故障的情况下，数据也不会损坏。当你需要依赖兼容ACID原则的业务时，你不必重复造轮子去实现一致性检查和崩溃恢复机制。如果你有额外的安全保证机制，可以调整牺牲掉ACID的一些可靠性换取更高的性能和数据吞吐量&lt;br&gt;A: atomicity (原子性)&lt;br&gt;C: consistency (一致性)&lt;br&gt;I: isolation （隔离性）&lt;br&gt;D: durability （持久性）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;SQL92 不支持的特性如下&lt;br&gt;RIGHT OUTER JOIN    只实现了 LEFT OUTER JOIN&lt;br&gt;FULL OUTER JOIN       只实现了 LEFT OUTER JOIN&lt;br&gt;ALTER TABLE          支持 RENAME TABLE 和 ALTER TABLE 的 ADD COLUMN variants 命令，不支持 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT&lt;br&gt;Trigger         支持 FOR EACH ROW 触发器，但不支持 FOR EACH STATEMENT 触发器&lt;br&gt;VIEWs          在 SQLite 中，视图是只读的,不可以在视图上执行 DELETE、INSERT 或 UPDATE 语句&lt;br&gt;GRANT 和 REVOKE    可以应用的唯一的访问权限是底层操作系统的正常文件访问权限&lt;/p&gt;
&lt;/blockquote&gt;
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
      <category term="SQLite" scheme="http://willkernel.github.io/tags/SQLite/"/>
    
  </entry>
  
  <entry>
    <title>Kotlin for Android(七)</title>
    <link href="http://willkernel.github.io/2018/03/25/Kotlin-for-Android-%E4%B8%83/"/>
    <id>http://willkernel.github.io/2018/03/25/Kotlin-for-Android-七/</id>
    <published>2018-03-25T04:08:00.000Z</published>
    <updated>2018-03-25T13:46:28.638Z</updated>
    
    <summary type="html">
    
      &lt;h4 id=&quot;创建业务逻辑访问数据&quot;&gt;&lt;a href=&quot;#创建业务逻辑访问数据&quot; class=&quot;headerlink&quot; title=&quot;创建业务逻辑访问数据&quot;&gt;&lt;/a&gt;创建业务逻辑访问数据&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;从数据库获取数据&lt;br&gt;检查是否存在对应星期的数据&lt;br&gt;如果有，返回UI并且渲染&lt;br&gt;如果没有，请求服务器获取数据&lt;br&gt;结果被保存在数据库中并且返回UI渲染&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;数据源应该是一个具体的实现，这样就可以被容易地修改，所以增加一些额外的代码，然后把 command 从数据访问中抽象出来听&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;interface ForecastDataSource &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;fun requestForecastByZipCode(zipCode: Long, date: Long): For&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ecastList?&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;使用数据库的数据源和服务端数据源。顺序是很重要的，因为它会根据顺序去遍历这个sources，然后一旦获取到有效的返回值就会停止查询。逻辑顺序是先在本地查询（本地数据库中），然后再通过API查询&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;class ForecastProvider(private val source: List&amp;lt;ForecastDataSource&amp;gt; = ForecastProvider.SOURCES) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    companion object &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        val DAY_IN_MILLIS = 1000 * 60 * 60 * 24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        val SOURCES = listOf(ForecastDb(), ForecastServer())&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    fun requestByZipCode(zipCode: Long, days: Int): ForecastList = source.firstResult &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        requestSource(it, days, zipCode)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    private fun requestSource(source: ForecastDataSource, days: Int, zipCode: Long): ForecastList? &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        val res = source.requestForecastByZipCode(zipCode, todayTimeSpan())&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        return if (res != null &amp;amp;&amp;amp; res.size &amp;gt;= days) res else null&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    private fun todayTimeSpan() = System.currentTimeMillis() / DAY_IN_MILLIS * DAY_IN_MILLIS&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/categories/Kotlin/"/>
    
    
      <category term="Android" scheme="http://willkernel.github.io/tags/Android/"/>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/tags/Kotlin/"/>
    
  </entry>
  
  <entry>
    <title>Kotlin for Android(六)</title>
    <link href="http://willkernel.github.io/2018/03/24/Kotlin-for-Android-%E5%85%AD/"/>
    <id>http://willkernel.github.io/2018/03/24/Kotlin-for-Android-六/</id>
    <published>2018-03-24T05:45:00.000Z</published>
    <updated>2018-03-25T03:48:57.586Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;h4 id=&quot;Kotlin中的null安全&quot;&gt;&lt;a href=&quot;#Kotlin中的null安全&quot; class=&quot;headerlink&quot;
        
      
    
    </summary>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/categories/Kotlin/"/>
    
    
      <category term="Android" scheme="http://willkernel.github.io/tags/Android/"/>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/tags/Kotlin/"/>
    
  </entry>
  
  <entry>
    <title>Kotlin for Android (五)</title>
    <link href="http://willkernel.github.io/2018/03/24/Kotlin-for-Android-%E4%BA%94/"/>
    <id>http://willkernel.github.io/2018/03/24/Kotlin-for-Android-五/</id>
    <published>2018-03-23T17:18:00.000Z</published>
    <updated>2018-04-03T01:56:24.193Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;h4 id=&quot;创建SQLiteHelper&quot;&gt;&lt;a href=&quot;#创建SQLiteHelper&quot; class=&quot;headerlink&quot; title=&quot;创建SQLiteHelper&quot;&gt;&lt;/a&gt;创建SQLiteHelper&lt;/h4&gt;&lt;p&gt;一般使用SqliteOpenHelper
        
      
    
    </summary>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/categories/Kotlin/"/>
    
    
      <category term="Android" scheme="http://willkernel.github.io/tags/Android/"/>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/tags/Kotlin/"/>
    
  </entry>
  
  <entry>
    <title>Kotlin for Android (四)</title>
    <link href="http://willkernel.github.io/2018/03/23/kotlin-for-Android-%E5%9B%9B/"/>
    <id>http://willkernel.github.io/2018/03/23/kotlin-for-Android-四/</id>
    <published>2018-03-23T12:08:00.000Z</published>
    <updated>2018-03-23T17:18:10.630Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;h4 id=&quot;Application单例化和属性的Delegated&quot;&gt;&lt;a href=&quot;#Application单例化和属性的Delegated&quot; class=&quot;headerlink&quot;
        
      
    
    </summary>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/categories/Kotlin/"/>
    
    
      <category term="Android" scheme="http://willkernel.github.io/tags/Android/"/>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/tags/Kotlin/"/>
    
  </entry>
  
  <entry>
    <title>Kotlin for Android (三)</title>
    <link href="http://willkernel.github.io/2018/03/23/Kotlin-for-Android-%E4%B8%89/"/>
    <id>http://willkernel.github.io/2018/03/23/Kotlin-for-Android-三/</id>
    <published>2018-03-23T08:34:27.000Z</published>
    <updated>2018-03-23T12:06:54.135Z</updated>
    
    <summary type="html">
    
      
      
        
        
          &lt;h4 id=&quot;操作符&quot;&gt;&lt;a href=&quot;#操作符&quot; class=&quot;headerlink&quot; title=&quot;操作符&quot;&gt;&lt;/a&gt;操作符&lt;/h4&gt;&lt;img
        
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Kotlin for Android (二)</title>
    <link href="http://willkernel.github.io/2018/03/23/Kotlin-for-Android-%E4%BA%8C/"/>
    <id>http://willkernel.github.io/2018/03/23/Kotlin-for-Android-二/</id>
    <published>2018-03-23T02:47:00.000Z</published>
    <updated>2018-03-23T08:33:33.257Z</updated>
    
    <summary type="html">
    
      &lt;h4 id=&quot;Anko&quot;&gt;&lt;a href=&quot;#Anko&quot; class=&quot;headerlink&quot; title=&quot;Anko&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/Kotlin/anko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Anko&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Anko Commons：一个轻量级的库，里面包含了intents，对话框，日志等帮助类&lt;/li&gt;
&lt;li&gt;Anko Layouts：用于编写动态Android布局的快速且类型安全的方法&lt;/li&gt;
&lt;li&gt;Anko SQLite：查询适用于Android SQLite的DSL和分析器集合&lt;/li&gt;
&lt;li&gt;Anko Coroutines：基于kotlinx.coroutines库的实用程序&lt;/li&gt;
&lt;li&gt;简化获取RecyclerView&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;val forecastList: RecyclerView = find(R.id.recyclerView)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;扩展函数&quot;&gt;&lt;a href=&quot;#扩展函数&quot; class=&quot;headerlink&quot; title=&quot;扩展函数&quot;&gt;&lt;/a&gt;扩展函数&lt;/h4&gt;&lt;p&gt;扩展函数数是指在一个类上增加一种新的行为，甚至我们没有这个类代码的访问权&lt;br&gt;限。这是一个在缺少有用函数的类上扩展的方法。在Java中，通常会实现很多带有&lt;br&gt;static方法的工具类。Kotlin中扩展函数的一个优势是我们不需要在调用方法的时候&lt;br&gt;把整个对象当作参数传入。扩展函数表现得就像是属于这个类的一样，而且我们可&lt;br&gt;以使用 this 关键字和调用所有public方法&lt;br&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;fun Context.toastF(message: CharSequence,duration: Int=Toast.LENGTH_SHORT)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   Toast.makeText(this, &amp;quot;$message&amp;quot;, duration).show()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Anko已经扩展toast函数，提供了CharSequence,(resource id)Int的函数&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;toast(R.string.app_name)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;longToast(&amp;quot;longToast&amp;quot;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;扩展函数并不是真正地修改了原来的类，它是以静态导入的方式来实现的。扩展函数可以被声明在任何文件中，通用的实践是把一系列有关的函数放在一个新建的文件里&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;var TextView.text: CharSequence&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   get() = getText()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   set(v) = setText(v)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/categories/Kotlin/"/>
    
    
      <category term="Android" scheme="http://willkernel.github.io/tags/Android/"/>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/tags/Kotlin/"/>
    
  </entry>
  
  <entry>
    <title>Kotlin for Android (一)</title>
    <link href="http://willkernel.github.io/2018/03/22/Kotlin-for-Android-%E4%B8%80/"/>
    <id>http://willkernel.github.io/2018/03/22/Kotlin-for-Android-一/</id>
    <published>2018-03-22T15:43:00.000Z</published>
    <updated>2018-03-23T02:49:12.143Z</updated>
    
    <summary type="html">
    
      &lt;h4 id=&quot;介绍Kotlin&quot;&gt;&lt;a href=&quot;#介绍Kotlin&quot; class=&quot;headerlink&quot; title=&quot;介绍Kotlin&quot;&gt;&lt;/a&gt;介绍Kotlin&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;编写代码量少&lt;/li&gt;
&lt;li&gt;更加安全：Kotlin编译时期就处理了各种null的情况，避免了执行时异常。如果一个对象可以是null，则我们需要明确地指定它，然后在使用它之前检查它是否是null&lt;/li&gt;
&lt;li&gt;它是函数式的：Kotlin是基于面向对象的语言，它使用了很多函数式编程的概念，比如，使用lambda表达式来更方便地解决问题。其中一个很棒的特性就是Collections的处理方式&lt;/li&gt;
&lt;li&gt;它可以扩展函数：可以扩展类的更多的特性，甚至我们没有权限去访问这个类中的代码&lt;/li&gt;
&lt;li&gt;它是高度互操作性的：你可以继续使用所有的你用Java写的代码和库，因为两个语言之间的互操作性是完美的。可以在一个项目中使用Kotlin和Java两种语言混合编程&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;特性&quot;&gt;&lt;a href=&quot;#特性&quot; class=&quot;headerlink&quot; title=&quot;特性&quot;&gt;&lt;/a&gt;特性&lt;/h4&gt;&lt;h5 id=&quot;Expresiveness-可读性&quot;&gt;&lt;a href=&quot;#Expresiveness-可读性&quot; class=&quot;headerlink&quot; title=&quot;Expresiveness 可读性&quot;&gt;&lt;/a&gt;Expresiveness 可读性&lt;/h5&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;POJO&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;public class Artist &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;private long id;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;private String name;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;private String url;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;private String mbid;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;public long getId() &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;return id;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;public void setId(long id) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;this.id = id;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;···&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kotlin中创建数据类Artist.kt,自动生成所有属性和访问器&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;data class Artist(var id: Long, var name: String, var url: String, var mbid: String)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;空安全&quot;&gt;&lt;a href=&quot;#空安全&quot; class=&quot;headerlink&quot; title=&quot;空安全&quot;&gt;&lt;/a&gt;空安全&lt;/h5&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt; //编译不通过，非空类不能为null&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; var artist:Artist=null&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; //安全调用操作符? 明确地指定一个对象是否能为空&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; var artist: Artist? = null&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;// 无法编译, artist可能是null，需要进行处理&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;// artist.hashCode()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;//在artist!=null时调用&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;artist?.hashCode()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;// 判空&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;if(artist!=null)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  artist.hashCode()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;//给定在null时的替代者&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;val name=artist?.name?:&amp;quot;empty&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;//确保artist不是null的情况下调用，否在抛异常KotlinNullPointerException&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;artist!!.hashCode()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/categories/Kotlin/"/>
    
    
      <category term="Android" scheme="http://willkernel.github.io/tags/Android/"/>
    
      <category term="Kotlin" scheme="http://willkernel.github.io/tags/Kotlin/"/>
    
  </entry>
  
  <entry>
    <title>RxJava2</title>
    <link href="http://willkernel.github.io/2018/03/20/RxJava2/"/>
    <id>http://willkernel.github.io/2018/03/20/RxJava2/</id>
    <published>2018-03-20T07:14:00.000Z</published>
    <updated>2018-03-21T18:07:17.577Z</updated>
    
    <summary type="html">
    
      &lt;h5 id=&quot;RxJava2&quot;&gt;&lt;a href=&quot;#RxJava2&quot; class=&quot;headerlink&quot; title=&quot;RxJava2&quot;&gt;&lt;/a&gt;RxJava2&lt;/h5&gt;&lt;p&gt;RxJava是Java VM响应式编程扩展的实现，扩展了观察者模式，通过操作符对数据事件流操作，来编写异步和基于事件的程序，从而不用关心同步，线程安全并发等问题&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;app/build.gradle&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;implementation &amp;apos;io.reactivex.rxjava2:rxjava:2.1.9&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;implementation &amp;apos;io.reactivex.rxjava2:rxandroid:2.0.2&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;//retrofit&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;implementation &amp;apos;com.squareup.retrofit2:retrofit:2.3.0&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;//Gson converter&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;implementation &amp;apos;com.squareup.retrofit2:converter-gson:2.3.0&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;//RxJava2 Adapter&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;implementation &amp;apos;com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;//okhttp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;implementation &amp;apos;com.squareup.okhttp3:okhttp:3.8.1&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;implementation &amp;apos;com.squareup.okhttp3:logging-interceptor:3.6.0&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
      <category term="RxJava2" scheme="http://willkernel.github.io/tags/RxJava2/"/>
    
  </entry>
  
  <entry>
    <title>Data Binding</title>
    <link href="http://willkernel.github.io/2018/03/16/Data-Binding/"/>
    <id>http://willkernel.github.io/2018/03/16/Data-Binding/</id>
    <published>2018-03-16T05:38:00.000Z</published>
    <updated>2018-03-21T18:10:19.922Z</updated>
    
    <summary type="html">
    
      &lt;h5 id=&quot;Data-Binding-Library&quot;&gt;&lt;a href=&quot;#Data-Binding-Library&quot; class=&quot;headerlink&quot; title=&quot;Data Binding Library&quot;&gt;&lt;/a&gt;Data Binding Library&lt;/h5&gt;&lt;p&gt;数据绑定库编写声明式布局，尽量减少绑定应用程序逻辑和布局所需的代码，减少布局绑定相关代码&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;build environment&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;android&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     dataBinding &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        enabled = true&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data Binding Compiler V2&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;android.databinding.enableV2=true&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;向后不兼容&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
  </entry>
  
  <entry>
    <title>Dagger</title>
    <link href="http://willkernel.github.io/2018/03/13/Dagger/"/>
    <id>http://willkernel.github.io/2018/03/13/Dagger/</id>
    <published>2018-03-12T16:12:00.000Z</published>
    <updated>2018-03-21T18:11:03.531Z</updated>
    
    <summary type="html">
    
      &lt;h5 id=&quot;Dagger&quot;&gt;&lt;a href=&quot;#Dagger&quot; class=&quot;headerlink&quot; title=&quot;Dagger&quot;&gt;&lt;/a&gt;Dagger&lt;/h5&gt;&lt;p&gt;依赖注入（Dependency Injection），简称DI，又叫控制反转（Inversion of Control），简称IOC&lt;br&gt;当一个类的实例需要另一个类的实例，在传统的设计中，通常由调用者来创建被调用者的实例，然而依赖注入的方式，创建被调用者不再由调用者创建实例，创建被调用者的实例的工作由IOC容器来完成，然后注入到调用者。因此也被称为依赖注入&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;public @interface Component &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    Class&amp;lt;?&amp;gt;[] modules() default &amp;#123;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    Class&amp;lt;?&amp;gt;[] dependencies() default &amp;#123;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @Target(TYPE)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @Documented&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @interface Builder &amp;#123;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;public @interface Subcomponent &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    Class&amp;lt;?&amp;gt;[] modules() default &amp;#123;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @Target(TYPE)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @Documented&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @interface Builder &amp;#123;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;public @interface Module &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    Class&amp;lt;?&amp;gt;[] includes() default &amp;#123;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @Beta&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    Class&amp;lt;?&amp;gt;[] subcomponents() default &amp;#123;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;public @interface Provides &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;public @interface MapKey &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    boolean unwrapValue() default true;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;public interface Lazy&amp;lt;T&amp;gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    T get();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
  </entry>
  
  <entry>
    <title>ConstraintLayout</title>
    <link href="http://willkernel.github.io/2018/03/10/ConstraintLayout/"/>
    <id>http://willkernel.github.io/2018/03/10/ConstraintLayout/</id>
    <published>2018-03-09T18:16:00.000Z</published>
    <updated>2018-03-20T07:12:15.997Z</updated>
    
    <summary type="html">
    
      &lt;ul&gt;
&lt;li&gt;&lt;p&gt;引入constraint-layout&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;allprojects &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    repositories &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        jcenter()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        maven &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            url &amp;apos;https://maven.google.com&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;compile &amp;apos;com.android.support.constraint:constraint-layout:1.1.0-beta5&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;属性&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintLeft_toLeftOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;左对齐&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintLeft_toRightOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;左边和约束控件的右边对齐&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintRight_toLeftOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;右边在某组件的左边&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintRight_toRightOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;右边在某组件的右边&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintTop_toTopOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;上边和某组件的上边对其&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintTop_toBottomOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;上边在某组件的下边&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintBottom_toTopOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;下边在某组件的上边&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintBottom_toBottomOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;下边在某组件的下边&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintBaseline_toBaselineOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;组件的基线位置和某组件的基线位置对其（很少用）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintStart_toEndOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintStart_toStartOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintEnd_toStartOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;layout_constraintEnd_toEndOf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;属性的值有两种，一种是同层级组件ID，还有就是parent，当值为parent时即是相对于父布局进行定位&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
  </entry>
  
  <entry>
    <title>CoordinatorLayout</title>
    <link href="http://willkernel.github.io/2018/03/09/CoordinatorLayout/"/>
    <id>http://willkernel.github.io/2018/03/09/CoordinatorLayout/</id>
    <published>2018-03-09T02:33:00.000Z</published>
    <updated>2018-03-21T18:13:30.692Z</updated>
    
    <summary type="html">
    
      &lt;h4 id=&quot;CoordinatorLayout&quot;&gt;&lt;a href=&quot;#CoordinatorLayout&quot; class=&quot;headerlink&quot; title=&quot;CoordinatorLayout&quot;&gt;&lt;/a&gt;CoordinatorLayout&lt;/h4&gt;&lt;p&gt;Material风格布局，包含在support Library中，结合AppbarLayout,CollapsingToolbarLayout等可达到MD设计风格布局&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;build.gradle&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;def SUPPORT = &amp;quot;26.1.0&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;dependencies &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  implementation &amp;apos;com.android.support:appcompat-v7:26.1.0&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &amp;apos;com.android.support.constraint:constraint-layout:1.0.2&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &amp;quot;com.android.support:design:$SUPPORT&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &amp;quot;com.android.support:cardview-v7:$SUPPORT&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &amp;quot;com.android.support:recyclerview-v7:$SUPPORT&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &amp;apos;de.hdodenhof:circleimageview:1.3.0&amp;apos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="Android" scheme="http://willkernel.github.io/categories/Android/"/>
    
    
  </entry>
  
  <entry>
    <title>Git</title>
    <link href="http://willkernel.github.io/2018/03/09/Git/"/>
    <id>http://willkernel.github.io/2018/03/09/Git/</id>
    <published>2018-03-08T17:04:00.000Z</published>
    <updated>2018-03-22T09:08:53.194Z</updated>
    
    <summary type="html">
    
      &lt;h4 id=&quot;入门&quot;&gt;&lt;a href=&quot;#入门&quot; class=&quot;headerlink&quot; title=&quot;入门&quot;&gt;&lt;/a&gt;入门&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;.git 的隐藏目录是你的本地仓库（Local Repository）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git log&lt;/code&gt; 查看历史 &lt;img src=&quot;http://p4n1d4izv.bkt.clouddn.com/images/gitlog.png&quot;&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git log -p&lt;/code&gt;查看详细历史&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git log --stat&lt;/code&gt; 查看简要统计&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git show e66666/branch&lt;/code&gt;查看指定commit，加文件名看指定文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git diff --staged/--cached&lt;/code&gt;查看当前工作目录与暂存区的不同，可以看到即将添加到暂存区的改动内容，&lt;code&gt;git diff HEAD&lt;/code&gt;看到当前工作目录与上一个commit的不同&lt;ul&gt;
&lt;li&gt;commit 的 SHA-1 校验和&lt;br&gt;&lt;code&gt;commit 8cf88cf35ce40cb91488e7d9b12cf46463fedc2f&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;&lt;img src=&quot;http://p4n1d4izv.bkt.clouddn.com/images/gitstatus.png&quot;&gt;
    
    </summary>
    
      <category term="Git" scheme="http://willkernel.github.io/categories/Git/"/>
    
    
      <category term="Git" scheme="http://willkernel.github.io/tags/Git/"/>
    
  </entry>
  
</feed>
