<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Runstoppable的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/runstoppable</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; runstoppable]]></copyright><item><title><![CDATA[[Android]自定义RecyclerView中View的动画]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/131412256</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/131412256</guid><author>runstoppable</author><pubDate>Tue, 27 Jun 2023 16:55:42 +0800</pubDate><description><![CDATA[官方有一个默认Item动画类DafaultItemAnimator，其中 DefaultItemAnimator 继承了SimpleItemAnimator 继承了 RecyclerView.ItemAnimator。]]></description><category></category></item><item><title><![CDATA[[Android]网络请求中关闭页面造成内存泄漏的解决办法]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/107692133</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/107692133</guid><author>runstoppable</author><pubDate>Thu, 30 Jul 2020 16:14:09 +0800</pubDate><description><![CDATA[网络请求导致内存泄漏
在执行网络请求的时候，网络不稳定或者超时的时候，获取数据时间比较长，用户可能已经退出这个界面了，这时候肯定会出现一些问题，首先因为Presenter还在请求数据，还持有Activity，就会导致内存泄漏。
    public NotPassPresenter(NotPassActivity activity) {
        mActivity = activity;
        mRepository = new ExpressRepository();
    }

  ]]></description><category></category></item><item><title><![CDATA[[Java]String所在的内存位置和长度]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/103914322</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/103914322</guid><author>runstoppable</author><pubDate>Thu, 09 Jan 2020 19:33:38 +0800</pubDate><description><![CDATA[Java运行时内存分五部分：
线程共享：堆内存、方法区（包括常量池）
线程私有：栈内存（虚拟机栈）、本地方法栈、程序计数器
String不是基本数据类型，那么一个string的内存位置是什么呢？一共有两种情况：


String直接赋值：
String s = “haha”;

s的引用存在栈内存中，引用指向的haha存在方法区的常量池中（先判断常量池中是否有一个haha，存在则直接指向，不存在则...]]></description><category></category></item><item><title><![CDATA[[Android]inflate解析]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/90048828</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/90048828</guid><author>runstoppable</author><pubDate>Thu, 09 May 2019 21:53:36 +0800</pubDate><description><![CDATA[常用inflate方法：
 inflate(int resource, ViewGroup root, boolean attachToRoot)

第一个参数xml布局资源索引，第二个参数指的是加载布局的root
Optional view to be the parent of the generated hierarchy (if attachToRoot is true), or else...]]></description><category></category></item><item><title><![CDATA[[Android]自定义ReplacementSpan实现带背景色的圆角SPAN]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/86703163</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/86703163</guid><author>runstoppable</author><pubDate>Wed, 30 Jan 2019 14:48:40 +0800</pubDate><description><![CDATA[某些情况下会使用到SpannableStringBuilder构建特殊样式的字符串
比如带有标签的标题：

使用自定义的ReplacementSpan，实现：
/**
 * 〈带背景色的圆角span〉
 */
public class RadiusBgSpan extends ReplacementSpan {

    private int mSize;
    private int mBg...]]></description><category></category></item><item><title><![CDATA[[Android]ImageSpan与TextView同一行图片居中]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/86700701</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/86700701</guid><author>runstoppable</author><pubDate>Wed, 30 Jan 2019 11:23:14 +0800</pubDate><description><![CDATA[在开发中常常会遇到标签（图片）+文字的需求，实现方式一般采用SpannableString的方式来实现。 这时候会遇到图片ImageSpan没有办法居中的问题。在解决这个问题之前，先学习字体属性Paint.FontMetrics。


通过上面的示意图，再看下FontMetrics 类：
 public static class FontMetrics {
    /**
     * The m...]]></description><category></category></item><item><title><![CDATA[Mac系统 安装 JDK 并配置环境]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/84109114</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/84109114</guid><author>runstoppable</author><pubDate>Thu, 15 Nov 2018 18:46:08 +0800</pubDate><description><![CDATA[第一步 : 下载 mac 版的 JDK
下载地址:&amp;nbsp;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
// 同意协议并点击下载
&amp;nbsp;
第二步 : 下载完成后, 按提示完成安装.
打开Finder,可以在下图所示的路径中找到安装好的jdk:

&amp;nbsp;
其中Co...]]></description><category></category></item><item><title><![CDATA[[JavaWeb]一些细节注意点和代码]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/83276750</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/83276750</guid><author>runstoppable</author><pubDate>Mon, 22 Oct 2018 18:17:50 +0800</pubDate><description><![CDATA[onsubmit事件支持所有浏览器，同时onsubmit事件支持且仅支持form标签。当在执行登录验证时，如果条件不足可能取消action事件的时候，必须保证声明onsubmit时为“return xxx”方式才能被所有浏览器支持，因此在声明onsubmit时，正确的写法是：
onsubmit = “return xxx”


...]]></description><category></category></item><item><title><![CDATA[[Android]屏幕适配相关]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/79641018</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/79641018</guid><author>runstoppable</author><pubDate>Sun, 30 Sep 2018 12:01:28 +0800</pubDate><description><![CDATA[记录屏幕适配相关注意点


设置字体，使app字体不受系统设置字体大小影响：




Resources res = getResources();
Configuration config = new Configuration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());...]]></description><category></category></item><item><title><![CDATA[[Andriod]监听键盘，控制布局向上的缩进]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/80684639</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/80684639</guid><author>runstoppable</author><pubDate>Wed, 13 Jun 2018 20:21:34 +0800</pubDate><description><![CDATA[&amp;amp;amp;amp;amp;lt;div class=&amp;amp;amp;amp;quot;article-title-box&amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;gt;
        &amp;amp;amp;amp;amp;lt;span class=&amp;amp;amp;amp;quot;article-type type-1 float-left&amp;amp;amp;amp;quot;&amp;amp;amp;amp;am]]></description><category></category></item><item><title><![CDATA[[Android]Maven 仓库的使用与私有仓库搭建]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/80362508</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/80362508</guid><author>runstoppable</author><pubDate>Fri, 18 May 2018 11:58:28 +0800</pubDate><description><![CDATA[
本文为“拥抱Android Studio”系列第四篇。作者何畅彬，现任BugTags技术总监，关注移动SDK研发、后端服务设计与实现，个人博客：&amp;amp;nbsp;http://kvh.io/。&amp;amp;nbsp;
使用 Android Studio，必然要与 maven 仓库频繁打交道，在创造和分享自己打造的 Android library 的时候，maven 仓库的知识更是必不可少。本章将为开发者系统梳理这...]]></description><category></category></item><item><title><![CDATA[[Android]自由添加Head和Foot对RecyclerView的Adapter]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/80236257</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/80236257</guid><author>runstoppable</author><pubDate>Tue, 08 May 2018 10:49:18 +0800</pubDate><description><![CDATA[该Adapter能达到给RecyclerView自由添加Head和View的目的，且添加的Head和Foot不受LayouManager干扰，代码如下：



public class BaseHeaderAndFooterAdapter&amp;lt;T&amp;gt; extends RecyclerView.Adapter&amp;lt;RecyclerView.ViewHolder&amp;gt; {
    priva...]]></description><category></category></item><item><title><![CDATA[[Android]RecyclerViewAdapter的封装]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/80236090</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/80236090</guid><author>runstoppable</author><pubDate>Tue, 08 May 2018 10:41:53 +0800</pubDate><description><![CDATA[现在项目中基本都使用RecyclerView了，因此对RecyclerView对Adapter的封装就显得很有必要。 
具体的实现逻辑：


将数据集合中对Bean规定为泛型
通过抽象方法在子类中传入布局动态初初始化ViewHolder
通过抽象方法将Bean和ViewHolder绑定


具体代码如下：



public abstract class BaseRecyclerAdapter&amp;amp;l...]]></description><category></category></item><item><title><![CDATA[[Android]关于TextView颜色选择器到正确使用——动态添加带有ICON的TextView到TabLayout中]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/80192280</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/80192280</guid><author>runstoppable</author><pubDate>Fri, 04 May 2018 11:07:53 +0800</pubDate><description><![CDATA[做小项目到时候需要自建TabLayout并且自定义TabItem，折腾了一下午，实现了功能，遇到两个坑予以记录：



1.添加自定义View到TabLayout中

TabLayout自带到TabItem拓展性太差，图片和文字到位置不能自由定制，导致显示效果不佳，因此最好自己动态添加Tab。本次是添加了一个带有Icon的TextView到TabLayout中，具体实现代码如下：

for (in...]]></description><category></category></item><item><title><![CDATA[[Java]public <T> void method，此地泛型的意思]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/79806845</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/79806845</guid><author>runstoppable</author><pubDate>Tue, 03 Apr 2018 17:43:20 +0800</pubDate><description><![CDATA[今天项目中遇到这样一个方法： 
public  &amp;lt;T&amp;gt;  void method(T var) 
不太明白什么意思，后来搜索下几篇文章，自己总结一下，和大家分享。 
先看例子：



static void fromArrayToCollection(Object[] a, Collection&amp;lt;?&amp;gt; c) {
    for (Object o : a) { 
     ...]]></description><category></category></item><item><title><![CDATA[[Android]使用SharedPreferences存取对象]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/79649630</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/79649630</guid><author>runstoppable</author><pubDate>Thu, 22 Mar 2018 09:53:50 +0800</pubDate><description><![CDATA[通常情况下SharedPreferences只用于存取基础数据类型或者String类型的键值对，但某些情况下需要存取一些复类型的对象，如集合对象，此时可以通过往SharedPreferences中存取对象的方式使用。

存时，把对象写入ByteArrayOutputStream中（外套ObjectOutputStream），然后将byte数组通过Base64编码为String结构，作为值存入。取时...]]></description><category></category></item><item><title><![CDATA[[Android]一些细节注意点和代码]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/79646274</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/79646274</guid><author>runstoppable</author><pubDate>Wed, 21 Mar 2018 21:22:43 +0800</pubDate><description><![CDATA[随时更新一些编写应用中遇到的细节注意点


对返回键的处理，如实现长按返回键退出：




@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK &amp;amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp;amp; event.getRepeatCou]]></description><category></category></item><item><title><![CDATA[[Java]Java中的transient关键字]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/79236201</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/79236201</guid><author>runstoppable</author><pubDate>Fri, 02 Feb 2018 10:32:58 +0800</pubDate><description><![CDATA[关键字介绍

一个对象只要实现了Serilizable接口，这个对象就可以被序列化，java的这种序列化模式为开发者提供了很多便利，可以不必关系具体序列化的过程，只要这个类实现了Serilizable接口，这个的所有属性和方法都会自动序列化。但是有种情况是有些属性是不需要序列号的，所以就用到这个关键字。只需要实现Serilizable接口，将不需要序列化的属性前添加关键字transient，序列化...]]></description><category></category></item><item><title><![CDATA[[Android]自定义控件主动测量自己尺寸的方法]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/79068300</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/79068300</guid><author>runstoppable</author><pubDate>Mon, 15 Jan 2018 20:16:02 +0800</pubDate><description><![CDATA[自定义控件有时需要主动测量自己的尺寸。如ListView、RecyclerView等列表控件在ScrollView或ExpandableListView中需要保持自己的尺寸，此时比较快捷的办法是写一个自定义的控件类继承与该被包裹的控件类，然后重写其onMeason方法，让其返回默认大小而不是适应的宽高，代码如下：



@Override
protected void onMeasure(int]]></description><category></category></item><item><title><![CDATA[[Android]配置Gradle的productFlavors构建项目用于多渠道打包或多环境运行]]></title><link>https://blog.youkuaiyun.com/runstoppable/article/details/78667843</link><guid>https://blog.youkuaiyun.com/runstoppable/article/details/78667843</guid><author>runstoppable</author><pubDate>Wed, 29 Nov 2017 17:28:31 +0800</pubDate><description><![CDATA[productFlavors对象可以用来分别定义产品不同的特性，使用它可以用一套代码创建不同的项目。productFlavors的使用有以下几种。
为产品设置不同的applicationId而编译出不同包名的APK，在app(module)目录下的build.gradle文件中加入productFlavors结构，代码如下：
productFlavors{
    productA{]]></description><category></category></item></channel></rss>