<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[爱篮球，爱撸码]]></title><description><![CDATA[骐骥一跃，不能十步；驽马十驾，功在不舍～]]></description><link>https://blog.youkuaiyun.com/jay_skye</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jay_skye]]></copyright><item><title><![CDATA[ButterKnife弃坑脚本]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/83856623</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/83856623</guid><author>jay_skye</author><pubDate>Thu, 08 Nov 2018 10:08:35 +0800</pubDate><description><![CDATA[背景
ButterKnife虽然帮助我们省去了繁琐的findViewById()，使用起来非常的快捷方便，但是有利必然也有弊，ButterKnife在编译期间会额外生成class文件，对App的方法数增加贡献不小，并且在library module中使用ButterKnife有着诸多不便，因此项目优化弃坑ButterKnife势在必行。
脚本说明
（1）解析@BindView注解得到view id...]]></description><category></category></item><item><title><![CDATA[Glide接入]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/79310679</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/79310679</guid><author>jay_skye</author><pubDate>Sun, 11 Feb 2018 14:48:32 +0800</pubDate><description><![CDATA[1、Glide的生命周期绑定

Glide.with()方法可以传入Context、Activity、Fragment等类型参数，Glide会根据传入参数的不同绑定不同的生命周期。因此，如果没有特定的需求，尽量传入Activity或者Fragment参数，这样Glide请求会在合适的时机释放资源。值得注意的是，如果在非主线程下，不管传入什么参数，Glide默认会取ApplicationContex...]]></description><category></category></item><item><title><![CDATA[ImageLoader.loadImage()同时加载相同url失败分析]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/79298798</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/79298798</guid><author>jay_skye</author><pubDate>Fri, 09 Feb 2018 15:18:01 +0800</pubDate><description><![CDATA[现象 
多处同时调用loadImage方法加载相同url，可能会导致部分调用失效，即图片加载不出来。比较普遍的场景是在Adapter的ViewHolder中加载相同的url。ImageLoader相关log如下：



07-02 17:14:22.754 30344-30486/ D/ImageLoader: ImageAware is reused for another image. Tas...]]></description><category></category></item><item><title><![CDATA[View事件分发机制]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/54581123</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/54581123</guid><author>jay_skye</author><pubDate>Tue, 17 Jan 2017 10:58:22 +0800</pubDate><description><![CDATA[view事件分发机制是Android知识的难点也是重点，想要实现view的嵌套滑动、滑动菜单等酷炫功能都得先掌握好事件分发机制。View的事件分发机制主要涉及到dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三个方法。public boolean dispatchTouchEvent(MotionEvent event)负责分发触摸事件至目标]]></description><category></category></item><item><title><![CDATA[微信小程序]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/52807689</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/52807689</guid><author>jay_skye</author><pubDate>Thu, 13 Oct 2016 16:06:46 +0800</pubDate><description><![CDATA[微信小程序还在测试阶段，网上有IDE（微信web开发者工具）的破解版，可以在没有AppID情况下进行小程序开发，官方最新版本的IDE（v0.10.101100）也已经支持无AppID配置下开发，相信离正式开放不远了。项目结构 
其实小程序的项目结构除了app级文件外并没有太多强制要求，引用时通常文件路径正确即可。
app级文件
app.json用来声明程序配置；app.wxss可以定义全局通用样式；]]></description><category></category></item><item><title><![CDATA[关于miui6.0动态权限适配]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/52574366</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/52574366</guid><author>jay_skye</author><pubDate>Sun, 18 Sep 2016 14:42:20 +0800</pubDate><description><![CDATA[android 6.0增加了runtime permission机制，但是其实miui在android 6.0发布之前就已经有了一套类似的权限管理机制，可以说是miui的一大特色吧。用户可以在应用的权限管理页面对权限进行设置，应用程序在执行需要权限的代码时，系统会自动判断权限，如果没有权限会弹出权限申请框或者toast提示，提示用户授予权限才能正常使用应用功能。miui的这套权限管理机制是在sdk]]></description><category></category></item><item><title><![CDATA[Gradle之android配置]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/52101147</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/52101147</guid><author>jay_skye</author><pubDate>Wed, 03 Aug 2016 10:27:58 +0800</pubDate><description><![CDATA[相信现在已经很少有公司android开发还用着Eclipse了吧，绝大部分都已经跟上潮流换上了Android Studio，AS默认使用Gradle作为项目构建工具。Gradle非常强大，可以方便我们做很多事情，例如： 
（1）方便我们复用代码和资源 
（2）方便我们使用相同的代码和资源构建出不同的应用 
（3）方便我们配置项目构建流程，甚至是加入自定义逻辑 
默认情况下build.gradle是这]]></description><category></category></item><item><title><![CDATA[优雅的使用abstract]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/52015796</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/52015796</guid><author>jay_skye</author><pubDate>Sun, 24 Jul 2016 19:57:36 +0800</pubDate><description><![CDATA[1、abstract介绍Java的abstract关键字可以修饰方法，也可以直接修饰类。当我们父类不关心某个方法具体实现时，可以使用abstract修饰该方法，使其成为虚方法。虚方法没有方法体，不需要实现，只需要声明即可。包含虚方法的类称为虚类，虚类也必须使用abstract关键字修饰。虚类除了不可以直接实例化，几乎和普通类没什么区别。继承虚类的子类，必须通过复写实现父类所有的虚方法，或者实现父类部]]></description><category></category></item><item><title><![CDATA[Weex尝鲜]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51858762</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51858762</guid><author>jay_skye</author><pubDate>Fri, 08 Jul 2016 10:25:10 +0800</pubDate><description><![CDATA[Weex是阿里开源的类React Native技术，其实按知乎上的讨论基本可以说是整合Vue.js＋React Native造的轮子（如何看待阿里无线前端发布的Weex?）。Weex是一款轻量级的移动端跨平台动态性技术解决方案，主要致力于使用Web方式开发出Native性能的App。Weex学习成本较RN相对较低， 可以说就是使用简易版的HTML/CSS/JavaScript以及自定义的一些组件和规]]></description><category></category></item><item><title><![CDATA[截屏事件监听实现]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51814852</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51814852</guid><author>jay_skye</author><pubDate>Sun, 03 Jul 2016 13:14:24 +0800</pubDate><description><![CDATA[现在很多app都有监听截屏的功能，可以提示用户分享或者发送截屏图片，进一步提升app的用户体验。例如，微信在截屏后，点击输入框＋号，会提示发送刚才的截屏图片，非常方便实用。其实，微信不光对截屏的图片进行了监听，你的手机sdcard里的大部分目录下新增图片时，都会被监听到。比如，你可以直接复制一张相册里的图片，微信也会提示。之前以为微信只是监听了系统截屏时发送的广播，然而查了文档并没有发现任何截屏类的]]></description><category></category></item><item><title><![CDATA[Multidex何弃疗]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51777961</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51777961</guid><author>jay_skye</author><pubDate>Tue, 28 Jun 2016 18:27:44 +0800</pubDate><description><![CDATA[当我们的app越来越大时，project build时可能会失败，报下面的错误。Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536或者是这样：trouble writing output:Too many field references: 131000; max is 65536.]]></description><category></category></item><item><title><![CDATA[layout中引用后定义的控件id不报错？]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51597474</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51597474</guid><author>jay_skye</author><pubDate>Mon, 06 Jun 2016 18:32:43 +0800</pubDate><description><![CDATA[1、问题最近写layout时遇到一个奇怪的问题，layout布局中有两个控件属性都引用了在其后定义的控件id，编译时其中一个报id找不到，但是另一个却没有报错，而且布局显示都正常。布局layout大致如下：<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_h]]></description><category></category></item><item><title><![CDATA[Android性能优化]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51553735</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51553735</guid><author>jay_skye</author><pubDate>Wed, 01 Jun 2016 09:56:05 +0800</pubDate><description><![CDATA[使用LocalBroadcastManager
使用Context的registerReceiver和sendBroadCast注册发送广播是全局范围的，或者说是整个系统范围的，而LocalBroadcastManager限定只在我们的app进程中，不用担心广播发送的数据往外泄露，同时外部应用也无法通过广播调起我们的app，因此更加安全。
convertView复用
如果使用ListView或者Gr]]></description><category></category></item><item><title><![CDATA[Scroller真的能滚吗？]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51489069</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51489069</guid><author>jay_skye</author><pubDate>Tue, 24 May 2016 16:59:40 +0800</pubDate><description><![CDATA[View的scrollTo或者scrollBy方法可以将View内容滚动到指定位置，但是两者都是瞬时完成的，没有过渡动作。为了提升用户体验，有时我们希望可以实现view平滑的滚动，这时Scroller就派上用场了。其实Scroller本身并不能滚动View，通常需要跟View的computeScroll配合使用才能发挥作用。例如我们自定义Layout：public class ScrollerTes]]></description><category></category></item><item><title><![CDATA[Java设计模式之单例模式]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51474732</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51474732</guid><author>jay_skye</author><pubDate>Mon, 23 May 2016 16:33:01 +0800</pubDate><description><![CDATA[1、使用场景所谓单例模式，就是只可能存在唯一一个类的实例，不能再多了。单例模式可以说是Java设计模式中最简单但也是最常用的一种了。在Android开发中也同样如此，当App需要一个全局的、跟Application同生命周期的服务或者需要统一管理调度某种资源等情况，我们通常会编写一个单例实现的类，达到统一资源服务入口的目的，同时也可以减少不必要的资源开销，提升App性能。Android源码中，也有很]]></description><category></category></item><item><title><![CDATA[Trick of clipToPadding]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51445491</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51445491</guid><author>jay_skye</author><pubDate>Wed, 18 May 2016 17:01:27 +0800</pubDate><description><![CDATA[1、问题使用ListView、GridView、RecyclerView等ViewGroup时，经常会需要设置上下左右的边距，但是在列表滚动时，边距始终存在，item不能出现在边距范围内，使得页面不太美观。2、目标去除ListView、GridView、RecyclerView等控件滑动时，上下存在的边距，提升用户体验。3、解决（1）首先能想到的解决方案是在各个item布局中去设置边距，这样滑动时，]]></description><category></category></item><item><title><![CDATA[与ListView不同，RecyclerView的嵌套解决]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51425726</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51425726</guid><author>jay_skye</author><pubDate>Mon, 16 May 2016 15:48:29 +0800</pubDate><description><![CDATA[1、问题ListView的item中嵌套了RecyclerView实现水平方向列表，导致RecyclerView高度不能正常显示。2、传统解决方案嵌套问题最基本的解决方法是重写onMeasure方法，手动测量ViewGroup的高度或者宽度。这里，因为我们的RecyclerView是水平的，而且每一个item的高度是相同的，所以只需要测出一个item的所占用高度（包括父控件的上下padding以及i]]></description><category></category></item><item><title><![CDATA[Android内存泄漏分析]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51425315</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51425315</guid><author>jay_skye</author><pubDate>Mon, 16 May 2016 15:10:07 +0800</pubDate><description><![CDATA[1、前言最近在fix 其他需求bug过程中，居然出现了OOM，程序直接挂了。第一反应是内存泄漏了，于是便开始查找原因。2、现象首先需要确定是不是内存泄漏，Android Studio的Memory监控（Android Monitors－> Memory）可以很好的呈现问题。 
第一次打开app时，内存占用在20m左右。连续多次关闭再打开操作，内存占用达到了90m左右，并且点击initiate GC（]]></description><category></category></item><item><title><![CDATA[RxJava 小试]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51424891</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51424891</guid><author>jay_skye</author><pubDate>Mon, 16 May 2016 14:26:22 +0800</pubDate><description><![CDATA[1、基本概念官方wiki这样介绍： RxJava is a Java VM implementation of ReactiveX (Reactive Extensions): a library for composing asynchronous and event-based programs by using observable sequences.翻译：RxJava是ReactiveX的]]></description><category></category></item><item><title><![CDATA[有趣的ViewPager]]></title><link>https://blog.youkuaiyun.com/jay_skye/article/details/51423803</link><guid>https://blog.youkuaiyun.com/jay_skye/article/details/51423803</guid><author>jay_skye</author><pubDate>Mon, 16 May 2016 11:36:23 +0800</pubDate><description><![CDATA[1、缘来最近看到一个比较有意思的功能，看着像ViewPager的翻页，又像HorizontalScrollview的滑动。如下图所示： 
 
联想到项目中刚做的一个类似的水平滑动，可以借鉴下，如果每次滑动都可以对齐图片边界，用户体验会不会更好点呢？2、实现毫无疑问，使用HorizontalScrollview肯定可以实现这样的功能，但是想一下应该需要处理一系列的触摸事件，判断滑动距离，自己去做图片边]]></description><category></category></item></channel></rss>