<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Strange_Monkey的博客]]></title><description><![CDATA[学习、记录、分享、交流]]></description><link>https://blog.youkuaiyun.com/Strange_Monkey</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Strange_Monkey]]></copyright><item><title><![CDATA[Java 泛型：深入理解通配符]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/88029979</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/88029979</guid><author>Strange_Monkey</author><pubDate>Wed, 05 Jun 2019 11:37:18 +0800</pubDate><description><![CDATA[1. 通配符概念
通配符的出现，允许类型参数变化。
2. 上界通配符（子类型通配符）

&amp;lt;? extends ClassType&amp;gt; 该通配符为 ClassType 的所有子类型。

表示任何泛型 ClassType 类型，它的类型参数是 ClassType 的子类，但不是 Pair&amp;lt; String&amp;gt;。
上界通配符可以使用返回值，但是不可以为方法提供参数。
继承关系：

可进...]]></description><category></category></item><item><title><![CDATA[The logbook of Android bug in daily development.]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/90899170</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/90899170</guid><author>Strange_Monkey</author><pubDate>Wed, 05 Jun 2019 11:14:32 +0800</pubDate><description><![CDATA[androidx 与 support 兼容、ButterKnife 版本

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28...]]></description><category></category></item><item><title><![CDATA[Java 泛型：深入理解泛型的类型擦除]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/87900188</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/87900188</guid><author>Strange_Monkey</author><pubDate>Sun, 24 Feb 2019 21:50:54 +0800</pubDate><description><![CDATA[泛型代码和虚拟机
Java 中的的泛型是伪泛型，为什这么说呢？因为 Java 在编译期间，所有的泛型信息都被擦除掉。称为类型擦除(type erasure)
在 Java 虚拟机中没有泛型类型对象 – 所有对象都是属于普通类 ， 所以我们要了解一下 类型擦除 的概念。
1. 类型擦除
无论何时定义一个泛型类型，都会自动提供一个响应的 原始类型 (raw type)(不存在泛型  )。原始类型的名字...]]></description><category></category></item><item><title><![CDATA[Kotlin Lambda 闭包语法]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/87536961</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/87536961</guid><author>Strange_Monkey</author><pubDate>Sun, 17 Feb 2019 15:48:37 +0800</pubDate><description><![CDATA[Java 中的 Lambda 语法
至于什么时候可以在 Java 中使用 Lambda ，具体可以参见 是时候了解 Lambda 表达式具体写法了
代码示例
public static void main(String[] args) {
    Thread thread = new Thread(new Runnable() {
            @Override
          ...]]></description><category></category></item><item><title><![CDATA[从缓存文件的角度帮你理解 Okhttp3 缓存原理]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86684097</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86684097</guid><author>Strange_Monkey</author><pubDate>Mon, 28 Jan 2019 23:20:22 +0800</pubDate><description><![CDATA[文章目录1. 需要了解的概念1.2 Okio1.1 DiskLruCache1.2.1 日志文件 journal1.2.2 DiskLruCache.Entry1.2.3 DiskLruCache.SnapShot1.2.3 DiskLruCache.Editor2. 缓存实现的有关流程1. 触发之后拦截器之前的操作1.1 日志文件的初始化1. App 启动后的初始化1.1  若 journal ...]]></description><category></category></item><item><title><![CDATA[关于 Java 异常机制的补充]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86659986</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86659986</guid><author>Strange_Monkey</author><pubDate>Sat, 26 Jan 2019 18:56:18 +0800</pubDate><description><![CDATA[为什么 Java 中打开物理资源，如磁盘文件、网络连接、数据库连接等，必须需要显式的关闭？

JVM 提供的垃圾回收机制只负责堆内存分配出来的内存，打开的物理资源，GC 是不进行回收的，所以需要手动的关闭。

如何正确的关闭资源？


在 finall 中执行资源关闭操作。
保证关闭资源前资源不为 null,因为存在资源初始化前就发生异常情况，所以在 finally 语句中对资源对象进行非空判断。...]]></description><category></category></item><item><title><![CDATA[Java 异常机制浅析]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86659724</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86659724</guid><author>Strange_Monkey</author><pubDate>Sat, 26 Jan 2019 18:22:44 +0800</pubDate><description><![CDATA[文章目录处理错误异常分类声明受查异常如何抛出异常创建异常类捕获异常捕获异常再次抛出异常和异常链finally 字句带资源的 try 语句分析堆栈轨迹元素使用异常机制的技巧使用断言启用和禁用断言使用断言完成代码检查记录日志关于异常的补充知识链接
处理错误
异常分类
所有的异常都是继承于 Throwable
graph LR
Error--&amp;gt;Throwable
Exception--&amp;gt;Th...]]></description><category></category></item><item><title><![CDATA[OkHttp3 中几个拦截器基本功能介绍]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86495423</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86495423</guid><author>Strange_Monkey</author><pubDate>Tue, 15 Jan 2019 16:50:53 +0800</pubDate><description><![CDATA[RetryAndFollowUpInterceptor
功能：实现重试、跟踪
实现原理：
while(true) 死循环的实现。
检验返回的 Response ，如果没有异常（包括请求失败、重定向等），那么执行 return Response, return 会直接结束循环操作，将结果返回到下一个拦截器中进行处理。
检验返回的 Response ，如果出现异常情况，那么会根据 Response 新...]]></description><category></category></item><item><title><![CDATA[手机安装 Charles HTTPS 证书]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86482605</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86482605</guid><author>Strange_Monkey</author><pubDate>Mon, 14 Jan 2019 20:20:14 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/weixin_35825766/article/details/80469619

]]></description><category></category></item><item><title><![CDATA[Java 内存空间分类]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86304399</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/86304399</guid><author>Strange_Monkey</author><pubDate>Fri, 11 Jan 2019 15:59:30 +0800</pubDate><description><![CDATA[
文章目录1. 概述2. 运行时数据区域2.1 程序计数器2.2 Java 虚拟机栈2.3 本地方法栈2.4 Java 堆2.5 方法区2.6 运行时常量池2.7 直接内存2.8 小结3. 附录
1. 概述
Java 不像 C/C++ 需要程序员自己管理内存，Java 把内存控制的权利交给类 Java 虚拟机。
2. 运行时数据区域
JVM 在 Java 程序运行时把它所管理的内存划分为几个不同的...]]></description><category></category></item><item><title><![CDATA[Kotlin 全面学习之路(十四) -- 注解和几个常用的注解]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/85224443</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/85224443</guid><author>Strange_Monkey</author><pubDate>Sun, 23 Dec 2018 17:46:43 +0800</pubDate><description><![CDATA[注解声明
注解是将元数据附加到代码的方法。要声明注解，请将  annotation  修饰符放在类的前面：
annotation class Fancy
注解的附加属性可以通过用元注解标注注解类来指定：

@Target 指定可以用该注解标注的元素的可能的类型（类、函数、属性、表达式等）；
@Retention 指定该注解是否存储在编译后的 class 文件中，以及它在运行时能否通过反射可见 （默...]]></description><category></category></item><item><title><![CDATA[Kotlin 中的 lateinit 、lazy、let 、apply 、also 、takeif、takeUnless]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/85164708</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/85164708</guid><author>Strange_Monkey</author><pubDate>Sun, 23 Dec 2018 16:29:08 +0800</pubDate><description><![CDATA[Kotlin和Groovy等语言一样，支持闭包(block)，如果函数中最后一个参数为闭包，那么最后一个参可以不写在括号中，而写在括号后面，如果只有一个参数，括号也可以去掉。
viewPager.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(...]]></description><category></category></item><item><title><![CDATA[关于Dalvik、ART、DEX、ODEX、JIT、AOT、OAT]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/85019528</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/85019528</guid><author>Strange_Monkey</author><pubDate>Tue, 18 Dec 2018 14:24:44 +0800</pubDate><description><![CDATA[关于Dalvik、ART、DEX、ODEX、JIT、AOT、OAT
发表于 2017-06-30 |  分类于 Android |    |   字数统计 |  阅读时长
关于Dalvik、ART、DEX、ODEX、JIT、AOT、OAT，说真的，我看着都头大，每次看完过不了多久就会忘记一些内容，然后再去搜资料，好记性不如烂笔头，写在这里随时温故。

Dalvik＆ART
1.1 Dalvik
D...]]></description><category></category></item><item><title><![CDATA[Flutter 异常集(持续更新...)]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/84922357</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/84922357</guid><author>Strange_Monkey</author><pubDate>Fri, 14 Dec 2018 18:20:30 +0800</pubDate><description><![CDATA[异常情况：

使用 flutter doctor 可以识别手机设备，但是 Adroid Studio 不识别。

解决：
使用命令行，设置 Flutter 配置下的 Android Sdk 目录。

flutter config --android-sdk /yourAndroidSDKLocation

或者
在 AS 界面 Flile -&amp;amp;gt; Project Structour 下设置 P...]]></description><category></category></item><item><title><![CDATA[CMake 常用的 API以及 Gradle 关联到原生库]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83993718</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83993718</guid><author>Strange_Monkey</author><pubDate>Wed, 14 Nov 2018 15:56:21 +0800</pubDate><description><![CDATA[
创建一个动态库/静态库

add_library(hello-libs // 指定库名
				  SHARED // 指定构建出来库的属性 -- SHARED：动态库、STATIC：静态库
            	  hello-libs.cpp // 指定源码文件
                   )


根据源码构建动态/静态库。

find_library() 命令添加到您的 CM...]]></description><category></category></item><item><title><![CDATA[Android Studio 配置 javah 生成 C/C++ 头文件，完成 JNI 调用]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/84028290</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/84028290</guid><author>Strange_Monkey</author><pubDate>Tue, 13 Nov 2018 16:56:57 +0800</pubDate><description><![CDATA[在自己阅读 &amp;amp;amp;amp;lt;&amp;amp;amp;amp;lt;Android 系统框架&amp;amp;amp;amp;gt;&amp;amp;amp;amp;gt; 一书时，在其中章节有相关 JNI 的描述中我得知可以通过 Java 代码中的本地方法的声明可以生成相应 C/C++ 的头文件，进而可以在 C/C++ 源文件中进一步实现，真是知识让我渺小 。

1、编辑 Java 源代码

HelloJNI.java

public class HelloJNI {
	// 本]]></description><category></category></item><item><title><![CDATA[Android Developer 需要了解的网站]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83178531</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83178531</guid><author>Strange_Monkey</author><pubDate>Mon, 12 Nov 2018 11:03:36 +0800</pubDate><description><![CDATA[Google Play 安装统计数据
Android 各版本新特性
Google Doc for andropid app developers
Google 官方 sample
谷歌开发者社区(GDG)

]]></description><category></category></item><item><title><![CDATA[C++ 学习需要认识的几个基本概念]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83070610</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83070610</guid><author>Strange_Monkey</author><pubDate>Thu, 01 Nov 2018 15:25:24 +0800</pubDate><description><![CDATA[
头文件
namespace 命名空间
编译执行过程
typedef 声明
C++ 中的变量声明 extern 关键字


变量声明向编译器保证变量以给定的类型和名称存在，这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义，在程序连接时编译器需要实际的变量声明。


函数的声明


同样的，在函数声明时，提供一个函数名，而函数的实际定义则可以在任何地方进行...]]></description><category></category></item><item><title><![CDATA[IBus 拼音无法选词]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83141942</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83141942</guid><author>Strange_Monkey</author><pubDate>Thu, 01 Nov 2018 10:41:00 +0800</pubDate><description><![CDATA[现象：Ubuntu 使用 IBus 拼音输入法在选词时无法得到相应的词，而只能显示相应的数字。
解决方法：删除 .cache/ibus/libpinyin/ 下的所有文件。
原因：不知道

...]]></description><category></category></item><item><title><![CDATA[如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion]]></title><link>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83178432</link><guid>https://blog.youkuaiyun.com/Strange_Monkey/article/details/83178432</guid><author>Strange_Monkey</author><pubDate>Fri, 19 Oct 2018 14:51:09 +0800</pubDate><description><![CDATA[英文原文：Picking your compileSdkVersion, minSdkVersion, and targetSdkVersion
作者：Ian Lake，Google Android 推广工程师；翻译：韩国恺。
当你发布一个应用之后，(取决于具体的发布时间)可能没过几个月 Android 系统就发布了一个新版本。这对你的应用意味着什么，所有东西都不能用了？
别担心，向前兼容是 An...]]></description><category></category></item></channel></rss>