<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dakaniu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dakaniu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dakaniu]]></copyright><item><title><![CDATA[单例模式的深入理解]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/83380129</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/83380129</guid><author>dakaniu</author><pubDate>Thu, 25 Oct 2018 15:16:43 +0800</pubDate><description><![CDATA[转载：http://www.cnblogs.com/snowbook/p/5149124.html]]></description><category></category></item><item><title><![CDATA[抽象类＆接口]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/83345925</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/83345925</guid><author>dakaniu</author><pubDate>Wed, 24 Oct 2018 16:18:24 +0800</pubDate><description><![CDATA[抽象类
abstract修饰的类就是抽象类，abstract修饰的方法就是抽象方法，抽象方法是没有方法体的；
抽象类中可以包含抽象方法，抽象类不能实例化，必须由子类继承，并实现抽象方法，才能使用；
抽象类与普通类的不同之处：一、抽象类有抽象方法，普通类没有；二、抽象类的构造器是供子类调用的，不能用于创建对象，普通类可以通过构造器实例化；
接口
public interface OnLoadDate...]]></description><category></category></item><item><title><![CDATA[ThreadLocal原理]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/80829079</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/80829079</guid><author>dakaniu</author><pubDate>Wed, 27 Jun 2018 15:53:41 +0800</pubDate><description><![CDATA[一、ThreadLocal概念ThreadLocal 是线程的局部变量， 是每一个线程所单独持有的，其他线程不能对其进行访问。当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本，即每个线程内部都会有一个该变量，这样同时多个线程访问该变量并不会彼此相互影响，因此他们使用的都是自己从内存中拷贝过来的变量的副本， 这样就不存在线程安全问题，也不会影响程序的执行性能...]]></description><category></category></item><item><title><![CDATA[线程以及线程池的几种方式和优缺点]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/80778801</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/80778801</guid><author>dakaniu</author><pubDate>Fri, 22 Jun 2018 21:23:37 +0800</pubDate><description><![CDATA[问：线程池常用的几种类型？答：Java通过Executors提供四种线程池，分别为：１　newCachedThreadPool创建一个可缓存线程池，如果线程池长度超过处理需要，可灵活回收空闲线程，若无可回收，则新建线程。Executors.newCachedThreadPool(); 缺点：大家一般不用是因为newCachedThreadPool 可以无线的新建线程，容易造成堆外内存溢出，因为它的...]]></description><category></category></item><item><title><![CDATA[动态权限适配方案]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/80777252</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/80777252</guid><author>dakaniu</author><pubDate>Fri, 22 Jun 2018 19:19:41 +0800</pubDate><description><![CDATA[权限管理系统的变化在Android6.0（M）之前，在用户安装应用的时候会产生一个权限列表，只有用户允许这些权限后，应用才可以正常的安装，这就会产生一个问题，这些权限对用户是不具有感知性的，也就是说用户都不知道你要这些权限干什么，我明明装的是一个阅读类型的应用，你却要我拨打电话的权限，你想干嘛呢？当然绝大部分的开发者是善意的，但也避免不了一些特殊人群利用这些“漏洞”做一些不好的事情。而在Andro...]]></description><category></category></item><item><title><![CDATA[内存泄露产生的原因和避免方式]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/80751456</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/80751456</guid><author>dakaniu</author><pubDate>Wed, 20 Jun 2018 20:34:23 +0800</pubDate><description><![CDATA[一、内存泄露如何产生？Java内存泄漏的根本原因是长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏，尽管短生命周期对象已经不再需要，但是因为长生命周期持有它的引用而导致不能被回收，这就是Java中内存泄漏的发生场景。具体主要有如下几大类：１、静态集合类引起内存泄漏：像HashMap、Vector等的使用最容易出现内存泄露，这些静态变量的生命周期和应用程序一致，他们所引用的所有的对象Ob...]]></description><category></category></item><item><title><![CDATA[OOM 内存溢出的原因和处理方法]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/80747754</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/80747754</guid><author>dakaniu</author><pubDate>Wed, 20 Jun 2018 16:23:52 +0800</pubDate><description><![CDATA[1 OOM的可能原因?1.数据库的cursor没有关闭。2.构造adapter没有使用缓存contentview。3.调用registerReceiver()后未调用unregisterReceiver().4.未关闭InputStream/OutputStream。5.Bitmap使用后未调用recycle()。6.Context泄漏。7.static关键字等。8.非静态内部类可能导致的内存泄露...]]></description><category></category></item><item><title><![CDATA[Android编译环境报错记录]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/79641519</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/79641519</guid><author>dakaniu</author><pubDate>Tue, 12 Jun 2018 11:56:14 +0800</pubDate><description><![CDATA[一、报错出现了build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj/lib/libc++.so' failed解决方案：　　1.art/build/Android.common_build.mk中把true改为false# Host.
ART_HOST_CLANG := fa...]]></description><category></category></item><item><title><![CDATA[java collection.sort()　根据对象的某个属性对list进行排序]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/80663235</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/80663235</guid><author>dakaniu</author><pubDate>Tue, 12 Jun 2018 11:52:50 +0800</pubDate><description><![CDATA[１基本类型的list排序/** 
 * 对List对象按照某个成员变量进行排序 
 * @param list       List对象 
 * @param sortField  排序的属性名称 
 * @param sortMode   排序方式：ASC，DESC 任选其一 
 */  
public static &amp;lt;T&amp;gt; void sortList(List&amp;lt;T&amp;gt; ...]]></description><category></category></item><item><title><![CDATA[基本排序算法]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/80657152</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/80657152</guid><author>dakaniu</author><pubDate>Mon, 11 Jun 2018 20:03:16 +0800</pubDate><description><![CDATA[    @Test
    public void addition_isCorrect() {
        assertEquals(4, 2 + 2);
        int[] b = {49, 38, 65, 97, 76, 23, 17};
//        InsetSort(b);
//        ShellInset(b);
//        SelectSort(b...]]></description><category></category></item><item><title><![CDATA[android 工程编译错误]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/79542157</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/79542157</guid><author>dakaniu</author><pubDate>Tue, 13 Mar 2018 16:26:21 +0800</pubDate><description><![CDATA[在工程的编译过程中会出现一些错误一、报错出现了build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj/lib/libc++.so' failed解决方案：　　1.art/build/Android.common_build.mk中把true改为false# Host.
ART_...]]></description><category></category></item><item><title><![CDATA[AIDL的原理以及demo]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/79412694</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/79412694</guid><author>dakaniu</author><pubDate>Thu, 01 Mar 2018 15:05:54 +0800</pubDate><description><![CDATA[第一部分　AIDL的概念以及使用步骤Android系统中的进程之间不能共享内存，因此，需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务，Android系统采用了远程过程调用（Remote Procedure Call，RPC）方式来实现。与很多其他的基于RPC的解决方案一样，Android使用一种接口定义语言（Interface Definition ...]]></description><category></category></item><item><title><![CDATA[View的滑动效果]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78913088</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78913088</guid><author>dakaniu</author><pubDate>Wed, 27 Dec 2017 15:48:06 +0800</pubDate><description><![CDATA[１滑动原理滑动一个view的原理就是通过不断的改变view的坐标来实现这个效果，基本思路：要实现view的滑动，必须监听用户的触摸事件，并根据事件传入的坐标，动态且不断的改变view的坐标，从而实现view跟随用户触摸的滑动而滑动． 
1.1 坐标系 
在android中有两种坐标系：android坐标系（屏幕坐标系）和view坐标系(视图坐标系)．android坐标系的定义是 
移动设备一般将屏幕]]></description><category></category></item><item><title><![CDATA[SurfaceView]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78867502</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78867502</guid><author>dakaniu</author><pubDate>Thu, 21 Dec 2017 20:38:20 +0800</pubDate><description><![CDATA[View 是通过刷新来重绘视图的,刷新的间隔时间是16ms,如果执行的操作太多,不能够在16ms内完成所有的操作,就会出现不断阻塞主线程,导致卡顿现象. 
而SurfaceView是android系统来解决上述问题的,是View的孪生兄弟,其主要区别在于以下几点
View主要适用于主动更新,而SurfaceView主要使用被动更新,比如频繁的刷新
View是在主线程中对画面进行刷新的,而Surfac]]></description><category></category></item><item><title><![CDATA[Android绘图机制二]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78856355</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78856355</guid><author>dakaniu</author><pubDate>Wed, 20 Dec 2017 18:47:29 +0800</pubDate><description><![CDATA[ColorMatrixAndroid对图片处理时,最常用的数据结构是Bitmap,整个图是由包含像素的点阵和对应透明度,红,绿,蓝的颜色值组成的,在Android中,系统使用ColorMatrix类来处理图像的色彩效果,ColorMatrix其实就是一个4x5颜色矩阵.        imageView = (ImageView)findViewById(R.id.icon_group);]]></description><category></category></item><item><title><![CDATA[Android绘图机制与处理技巧]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78846972</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78846972</guid><author>dakaniu</author><pubDate>Tue, 19 Dec 2017 20:27:22 +0800</pubDate><description><![CDATA[1  单位转换由于各种屏幕密度不同,导致同样像素大小的长度,在不同密度的屏幕上显示的长度不同,如下是各个密度值中的换算公式, 
在mdpi 中 1dp = 1px, 
在hdpi 中 1dp = 1.5px, 
在xhdpi 中 1dp = 2px, 
在xxhdpi 中 1dp = 3px, 
其直接的换算公式是: ldpi:mdpi:hdpi:xhdpi:xxhpi = 3:4:6:8:12]]></description><category></category></item><item><title><![CDATA[ViewGroup 自定义演示]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78743501</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78743501</guid><author>dakaniu</author><pubDate>Thu, 07 Dec 2017 17:07:34 +0800</pubDate><description><![CDATA[第一部分:利用系统属性自定义ViewGroup1、ViewGroup的职责是啥？ 
ViewGroup相当于一个放置View的容器，ViewGroup的职能为：给childView计算出建议的宽和高和测量模式 ；决定childView的位置；为什么只是建议的宽和高，而不是直接确定呢，因为childView宽和高可以设置为wrap_content，这样只有childView才能计算出自己的宽和高。]]></description><category></category></item><item><title><![CDATA[自定义控件的演示]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78647669</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78647669</guid><author>dakaniu</author><pubDate>Mon, 27 Nov 2017 18:25:26 +0800</pubDate><description><![CDATA[通常情况下,有三种情况实现自定义控件:
对现有控件进行拓展 
该方法主要是在原生控件的基础上进行拓展,增加新的功能,修改显示UI等,一般是通过onDraw方法进行拓展.
通过组合来实现新的控件 
该方法主要是通过继承合适的ViewGroup,比如,LinearLayout,RelativeLayout等等,再添加一些点击事件,监听事件等指定功能,从而合成复合控件,另外还可以指定一些它自己的属性,让其]]></description><category></category></item><item><title><![CDATA[React Native按钮的实现]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78604375</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78604375</guid><author>dakaniu</author><pubDate>Wed, 22 Nov 2017 15:38:06 +0800</pubDate><description><![CDATA[在React Native中没有专门的按钮组件,所以在React Native中是借助Touchablexxx组件包裹我们的视图来响应用户的点击事件,另外Touchable组件，都是在根节点只支持一个组件，如果你需要多个组件同时相应单击事件，可以用一个View将它们包裹着. 
  #.TouchableWithoutFeedback： 
    该组件响应点击事件，不显示任何视觉反馈。常用的属性有:]]></description><category></category></item><item><title><![CDATA[React Native的按钮详解]]></title><link>https://blog.youkuaiyun.com/dakaniu/article/details/78554432</link><guid>https://blog.youkuaiyun.com/dakaniu/article/details/78554432</guid><author>dakaniu</author><pubDate>Thu, 16 Nov 2017 19:10:05 +0800</pubDate><description><![CDATA[在React Native中没有专门的按钮组件,所以在React Native中是借助Touchablexxx组件包裹我们的视图来响应用户的点击事件,另外Touchable组件，都是在根节点只支持一个组件，如果你需要多个组件同时相应单击事件，可以用一个View将它们包裹着. 
  #.TouchableWithoutFeedback： 
    该组件响应点击事件，不显示任何视觉反馈。常用的属性有:]]></description><category></category></item></channel></rss>