<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[JoneRen的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/JoneRen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; JoneRen]]></copyright><item><title><![CDATA[压缩代码和资源]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/81479165</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/81479165</guid><author>JoneRen</author><pubDate>Tue, 07 Aug 2018 12:29:18 +0800</pubDate><description><![CDATA[要尽可能减小 APK 文件，您应该启用压缩来移除发布构建中未使用的代码和资源。此页面介绍如何执行该操作，以及如何指定要在构建时保留或舍弃的代码和资源。

代码压缩通过 ProGuard 提供，ProGuard 会检测和移除封装应用中未使用的类、字段、方法和属性，包括自带代码库中的未使用项（这使其成为以变通方式解决 64k 引用限制的有用工具）。ProGuard 还可优化字节码，移除未使用的代码指令...]]></description><category></category></item><item><title><![CDATA[数字的比较，==与===比较]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/75003361</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/75003361</guid><author>JoneRen</author><pubDate>Wed, 12 Jul 2017 07:19:28 +0800</pubDate><description><![CDATA[Kotlin 中没有基础数据类型，只有封装的数字类型，你每定义的一个变量，其实 Kotlin 帮你封装了一个对象，
这样可以保证不会出现空指针。数字类型也一样，所有在比较两个数字的时候，就有比较数据大小和比较两个对象是否相同的区别了。
在 Kotlin 中，三个等号 === 表示比较对象地址，两个 == 表示比较两个值大小
fun main(args: Array) {
    val a =]]></description><category></category></item><item><title><![CDATA[基本数据类型:Byte、Short、Int、Long]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/74908170</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/74908170</guid><author>JoneRen</author><pubDate>Mon, 10 Jul 2017 07:36:11 +0800</pubDate><description><![CDATA[Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。
不同于Java的是，字符不属于数值类型，是一个独立的数据类型。Boolean是单独的一个数值类型.
//1.Byte、Short、Int、Long写法一致，下面以Int举例使用
//形式 var 变量名 ：Int = 值;
// 由于Kotlin 有类型推断，类型可以省略不写。简写：var ]]></description><category></category></item><item><title><![CDATA[val与var]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/74908139</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/74908139</guid><author>JoneRen</author><pubDate>Mon, 10 Jul 2017 07:09:34 +0800</pubDate><description><![CDATA[Kotlin被谷歌推荐为Android开发第一语言，感兴趣的同学可以学一下，潜力很大。在学习Kotlin语法的时，大家需要提前搭建一个环境，可以参考这个网址：http://www.runoob.com/kotlin/kotlin-setup.html]]></description><category></category></item><item><title><![CDATA[Transition（Activity切换过渡动画）]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73275992</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73275992</guid><author>JoneRen</author><pubDate>Thu, 15 Jun 2017 11:03:58 +0800</pubDate><description><![CDATA[Material Design 应用中的操作行为转换透过通用元素之间的移动和转换提供不同状态之间的视觉连接。 您可为进入、退出转换以及操作行为之间的共享元素转换指定定制动画。

活动过渡提供了两种过渡类型：
1，输入（进入）：进入一个活动的效果
2，退出（退出）：退出一个活动的效果
而这每种类型又分为普通和共享元素的过渡。
普通转型
爆炸 explode：从场景的中心移入或移出 
]]></description><category></category></item><item><title><![CDATA[StateListAnimator视图状态改变动画]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73275386</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73275386</guid><author>JoneRen</author><pubDate>Thu, 15 Jun 2017 10:36:14 +0800</pubDate><description><![CDATA[Material Design 中最基础的一条原则就是 'motion provides meaning'，也就是当用户和你的 app 交互时应当提供合理的视觉反馈。标准做法是使用官方提供的 StateListDrawable 来为控件实现交互效果。
StateListAnimator 是和 Material Design 一同在 API 21 引入的，可以用来方便的实现交互反馈的视觉效果，今天]]></description><category></category></item><item><title><![CDATA[矢量图片添加动画 AnimatedVectorDrawable]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73275195</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73275195</guid><author>JoneRen</author><pubDate>Thu, 15 Jun 2017 10:25:34 +0800</pubDate><description><![CDATA[矢量图的好处：
1、文件占用空间小，且矢量图形文件与分辨率和图像大小无关，只与图像的复杂程度有关，图像文件所占的存储空间较小。
2、图像放大不失真，.即矢量图可以无级缩放，对图形进行缩放，旋转或变形操作时，图形不会产生锯齿效果。
AnimatedVectorDrawable 类别可让您为矢量图片的属性添加动画。
您通常可以在 3 个 XML 文件中定义添加动画的矢量图片：
在 res/d]]></description><category></category></item><item><title><![CDATA[曲线运动PathInterpolator /path]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73275054</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73275054</guid><author>JoneRen</author><pubDate>Thu, 15 Jun 2017 10:13:01 +0800</pubDate><description><![CDATA[Material Design 中的动画利用曲线实现时间内插与空间移动模式。 利用 Android 5.0（API 级别 21）及更高版本，您可为动画定义定制时间曲线以及曲线运动模式。
PathInterpolator 类别是一个基于贝塞尔曲线或 Path 对象的全新插入器。 此插入器在一个 1x1 的正方形内指定一个运动曲线，定位点位于 (0,0) 以及 (1,1)，而控制点则使用构造函数参数]]></description><category></category></item><item><title><![CDATA[揭露动画ViewAnimationUtils.createCircularReveal()]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73065612</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73065612</guid><author>JoneRen</author><pubDate>Sun, 11 Jun 2017 21:44:40 +0800</pubDate><description><![CDATA[当您显示或隐藏一组 UI 元素时，揭露动画可为用户提供视觉连续性。ViewAnimationUtils.createCircularReveal() 方法让您能够为裁剪区域添加动画以揭露或隐藏视图。
应用ViewAnimationUtils.createCircularReveal（）方法可以去创建一个RevealAnimator动画。
ViewAnimationUtils.createCir]]></description><category></category></item><item><title><![CDATA[JVM、Dalvik、 ART三种虚拟机简单对比]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73065086</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73065086</guid><author>JoneRen</author><pubDate>Sun, 11 Jun 2017 20:35:04 +0800</pubDate><description><![CDATA[Dalvik虚拟机存在于Android系统，JVM是java虚拟机，两者都是虚拟机。

1. Dalvik 基于寄存器，而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说，在它们编译的时候，花费的时间更短。 　

2.Dalvik执行.dex格式的字节码，而JVM执行.class格式的字节码。

3.Dalvik 和 Java SDK的SDK不同。

4.Dalvik 和 Java 运行环境...]]></description><category></category></item><item><title><![CDATA[Android版本更新]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73065009</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73065009</guid><author>JoneRen</author><pubDate>Sun, 11 Jun 2017 20:31:17 +0800</pubDate><description><![CDATA[Android1.1
　　2008 年9月发布的Android第一版
Android1.5 Cupcake （纸杯蛋糕）
　　2009年4月30日，主要的更新如下：
　　1、拍摄/播放影片，并支持上传到Youtube
　　2、支持立体声蓝牙耳机，同时改善自动配对性能
　　3、最新的采用WebKit技术的浏览器，支持复制/贴上和页面中搜索
　　4、GPS性能大大提高
　　5、提供屏幕]]></description><category></category></item><item><title><![CDATA[rippleDrawable 触摸反馈]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/73064832</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/73064832</guid><author>JoneRen</author><pubDate>Sun, 11 Jun 2017 19:47:10 +0800</pubDate><description><![CDATA[在5.0以上设备上实现波纹效果，可以通过给View设置background实现。官方已经有两个已经实现的效果供我们选择：
1.?android:attr/selectableItemBackground
在5.0以下的设备上没有波纹效果，是普通的变色效果。波纹效果会被限制在View的大小之内。
2.?android:attr/selectableItemBackgroundBorderles]]></description><category></category></item><item><title><![CDATA[Android studio如何创建一个AIDL文件]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72885807</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72885807</guid><author>JoneRen</author><pubDate>Tue, 06 Jun 2017 17:59:30 +0800</pubDate><description><![CDATA[1.创建一个工程，在java目录下的包内创建一个实现了Parcelable的类，比如Person。



2.右键创建任意命名的AIDL文件，如Book.AIDL



在main方法下自动生成一个aidl的文件夹，里边包含我们命名的.aidl文件，而且这里的包名和我们的java代码包名保持一致。


3.这里的命名是可以任意修改的，这里我们修改为Person.aidl，和我]]></description><category></category></item><item><title><![CDATA[序列化Serializable、Parcelable]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72876490</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72876490</guid><author>JoneRen</author><pubDate>Tue, 06 Jun 2017 11:35:42 +0800</pubDate><description><![CDATA[1.Serializable
Serializable是Java提供的一个序列化接口，它是一个空接口，为对象提供标准的序列化和反序列化的操作。使用方法简单，只需要提供一个类似下面的标示即可。
private static final long serialVersionUID=6366644757585885L.

简单的一个序列化例子：
public class Data impleme]]></description><category></category></item><item><title><![CDATA[Bitmap采样]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72852884</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72852884</guid><author>JoneRen</author><pubDate>Sat, 03 Jun 2017 16:44:08 +0800</pubDate><description><![CDATA[1.图片加载
BitmapFactory类提供了四种加载的方法：decodeFile,decodeResource,decodeStream,decodeByteArray,分别支持从文件、资源、输入流以及字节数组来加载Bitmap对象，其中decodeFile,decodeResource又间接调用了decodeStream方法，这四类方法最终在Android的底层实现，对应着BitmapFa]]></description><category></category></item><item><title><![CDATA[JNI和NDK编程]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72633166</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72633166</guid><author>JoneRen</author><pubDate>Mon, 22 May 2017 23:35:09 +0800</pubDate><description><![CDATA[Java JNI:Java Native Interface(Java本地接口)，是为了方便Java调用C、C++D等本地代码所封装的一层接口。
NDK是Android所提供的一个工具集合，通过NDK可以在Android中更加方便的通过JNI来访问本地代码，比如C/C++，NDK还提供了交叉编译器，开发人员只需简单修改mk文件就可以生成特定CPU平台的动态库。使用NDK的好处：
1.提高代码的]]></description><category></category></item><item><title><![CDATA[multidex解决方法数越界]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72626828</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72626828</guid><author>JoneRen</author><pubDate>Mon, 22 May 2017 15:28:59 +0800</pubDate><description><![CDATA[Android单个dex文件所能包含的最大方法数是65536，这个包括Android FrameWork、依赖jar包以及应用本身的所有方法。当应用的方法数达到65536之后，编译出现问题。

UNEXPECTED TOP-LEVEL EXCEPTION:  
java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 6]]></description><category></category></item><item><title><![CDATA[CrashHandle捕获崩溃信息]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72626774</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72626774</guid><author>JoneRen</author><pubDate>Mon, 22 May 2017 15:23:53 +0800</pubDate><description><![CDATA[程序的崩溃是不可避免的，我们有时需要手动捕捉这些崩溃信息，上传服务器。Android提供了扑捉crash的方法。在Thread类中，有一个方法setDefaultUncaughtExceptionHandler;
 /**
     * Set the default handler invoked when a thread abruptly terminates
     * due to ]]></description><category></category></item><item><title><![CDATA[BroadcastReceiver注册、发送、接收源码分析]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72556751</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72556751</guid><author>JoneRen</author><pubDate>Fri, 19 May 2017 20:00:03 +0800</pubDate><description><![CDATA[BroadcastReceiver包括两方面，一是广播的注册过程，二是广播的发送和接收过程。
首先要定义一个广播的接受者，只需要集成BroadcastReceiver，并重写它的onReceiver（)方法就可以了，在该方法内不要做超过10ms的耗时工作。
注册广播接受者有两种方式；
一是在AndroidManifest文件中静态注册：
二是在代码中动态注册，采用registerRecei]]></description><category></category></item><item><title><![CDATA[Service进阶篇(bindService)]]></title><link>https://blog.youkuaiyun.com/JoneRen/article/details/72529070</link><guid>https://blog.youkuaiyun.com/JoneRen/article/details/72529070</guid><author>JoneRen</author><pubDate>Fri, 19 May 2017 14:48:36 +0800</pubDate><description><![CDATA[本篇是Service进阶篇(bindService),观看本篇文章，请务必先观看Service进阶篇(startService),本篇文章会在它分析的基础上，直接描述，会缺少一些细节。]]></description><category></category></item></channel></rss>