<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Android_Ape]]></title><description><![CDATA[正是阳和春复后，时来铁也变成金！]]></description><link>https://blog.youkuaiyun.com/u013812939</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u013812939]]></copyright><item><title><![CDATA[关于DrawText的基准线纵坐标的计算]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/76595717</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/76595717</guid><author>u013812939</author><pubDate>Wed, 02 Aug 2017 20:19:20 +0800</pubDate><description><![CDATA[我们在自定义View的时候经常会用到drawText 这个函数来绘制文本， 它绘制文本的时候有点特别，是以基准线为准来绘制的，通常在对齐居中的时候要计算下它的纵坐标，这里小结下。
        
        如上图标注，通常用FontMetrics的top, bottom变量就可以算出基准线的坐标。top是相对于BaseLine偏移量，因为它在基准线上面，所以为负数，bottom是相对于]]></description><category></category></item><item><title><![CDATA[模仿手机QQ以视频流背景的登录界面]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/76559840</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/76559840</guid><author>u013812939</author><pubDate>Tue, 01 Aug 2017 21:57:45 +0800</pubDate><description><![CDATA[1. 思路：很简单，VideoView播放视频。
布局方式如下：

<RelativeLayout
    android:id="@+id/activity_video_view_background"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.]]></description><category></category></item><item><title><![CDATA[解决IDEA编译通过能运行但是出现红色下划线的问题idea cant resolve symbol"xxx"]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/50585228</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/50585228</guid><author>u013812939</author><pubDate>Tue, 26 Jan 2016 09:36:18 +0800</pubDate><description><![CDATA[能编译通过说明SDK导入正确，但是为啥我们点击每一个Java文件会出现好多红色的下划线 ，并提示idea cant resolve symbol
原因就是可能没有清除原来的历史缓存，导致一些错误，解决方法是 File-Invalidate Caches 然后重启IDEA，OK~困扰多年的问题解决！]]></description><category></category></item><item><title><![CDATA[解决在Fragment中不能自动弹出软键盘的问题]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/50345901</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/50345901</guid><author>u013812939</author><pubDate>Thu, 17 Dec 2015 19:38:29 +0800</pubDate><description><![CDATA[1.在Activity中，EditText 无法自动弹出软键盘，可以在尝试在AndroidManifest中设置android:windowSoftInputMode=adjustResize

也可以
edit.setFocusable(true);
edit.setFocusableInTouchMode="true"
 edit.requestFocus();


2.2.在Fr]]></description><category></category></item><item><title><![CDATA[android启动一个应用程序大概流程]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/48914853</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/48914853</guid><author>u013812939</author><pubDate>Mon, 05 Oct 2015 16:39:48 +0800</pubDate><description><![CDATA[启动一个应用无非都是通过这个startActivity()函数来完成，通常我们启动一个app都是在桌面点击Launcher图标,大概流程主要是以下几个步骤：
1.Launcher通过Binder进程间通信机制通知ActivityManagerService，它要启动一个Activity。

2.ActivityManagerService通过Binder进程间通信机制通知Launcher进入]]></description><category></category></item><item><title><![CDATA[Serial,Parallel,CMS,G1四大GC收集器特点小结]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/48782343</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/48782343</guid><author>u013812939</author><pubDate>Mon, 28 Sep 2015 11:39:41 +0800</pubDate><description><![CDATA[1.Serial收集器
一个单线程的收集器，在进行垃圾收集时候，必须暂停其他所有的工作线程直到它收集结束。
特点：CPU利用率最高，停顿时间即用户等待时间比较长。
适用场景：小型应用
通过JVM参数-XX:+UseSerialGC可以使用串行垃圾回收器。

2.Parallel收集器
采用多线程来通过扫描并压缩堆
特点：停顿时间短，回收效率高，对吞吐量要求高。
适用场景：大型应用]]></description><category></category></item><item><title><![CDATA[JNI 字符串拼接方法]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/48246971</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/48246971</guid><author>u013812939</author><pubDate>Sun, 06 Sep 2015 17:33:19 +0800</pubDate><description><![CDATA[上代码：
//拼接字符串的方法
JNIEXPORT jstring JNICALL Java_cn__DataProvider_sayHelloInC

(JNIEnv * env , jobjectobj , jstring jstr){

//把java中的string 转化成 c语言里面的char数组

char* cstr = Jstring2CStr(env,jstr);
char*]]></description><category></category></item><item><title><![CDATA[FIFO、LRU、OPT这三种置换算法的缺页次数]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/48225015</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/48225015</guid><author>u013812939</author><pubDate>Sat, 05 Sep 2015 14:26:41 +0800</pubDate><description><![CDATA[考虑下述页面走向：

          1，2，3，4，2，1，5，6，2，1，2，3，7，6，3，2，1，2，3，6

     当内存块数量分别为3时，试问FIFO、LRU、OPT这三种置换算法的缺页次数各是多少?

   答：缺页定义为所有内存块最初都是空的，所以第一次用到的页面都产生一次缺页。

       当内存块数量为3时：









]]></description><category></category></item><item><title><![CDATA[C++中数据类型的字节数]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47759301</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47759301</guid><author>u013812939</author><pubDate>Tue, 18 Aug 2015 20:53:26 +0800</pubDate><description><![CDATA[32位
char  1个字节
short int  2个字节
int   4个字节
unsigned int  4个字节
unsigned long  4 个字节
float  4个字节
long  4个字节
double  8个字节
long long 8个字节

char * 指针变量4个字节（指针都是4）


16位
char 1个字节
short int 2]]></description><category></category></item><item><title><![CDATA[SurfaceView和View区别总结]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47752315</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47752315</guid><author>u013812939</author><pubDate>Tue, 18 Aug 2015 15:23:34 +0800</pubDate><description><![CDATA[一、View简介
View一般在onDraw方法里面绘图，onDraw在UI主线程执行。onDraw默认只在View初始化的时候调用一遍，所以View不会自动刷新画面，一般要调用invalidate或者postInvalidate来重新执行onDraw里面的代码进行刷新画面。UI主线程一般用来渲染组件、处理组件与用户之间的交互事件，比如说按钮的点击事件、文本框的输入事件。如果你的画图任务相当繁重]]></description><category></category></item><item><title><![CDATA[new,malloc区别]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47707957</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47707957</guid><author>u013812939</author><pubDate>Sun, 16 Aug 2015 22:22:45 +0800</pubDate><description><![CDATA[1.malloc/free是c++/c语言标准库函数，new/delete是c++运算符，都可以申请动态内存和释放内存


2.new出来的指针是直接带类型信息，malloc申请内存需要类型转换，new不用。


3.对非内部数据类型的对象， malloc/free 无法满足动态对象的要求。由于malloc/free是库函数，在非内部，不能自动执行类的构造函数，free时候不能执行析构]]></description><category></category></item><item><title><![CDATA[设计模式面试大集锦]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47659441</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47659441</guid><author>u013812939</author><pubDate>Fri, 14 Aug 2015 11:44:24 +0800</pubDate><description><![CDATA[一、入门级程序员的面试题：

这些软件设计和设计模式的先关问题大多会出现在初学者面试情景中，什么是设计模式？特定的设计模式又是什么？等等这些概念，也许你很轻易回答这些概念，但文内提供的这些问题也许能给你带来更多价值。

1. 什么是设计模式？在你编码过程中使用了哪些设计模式？

每位程序员都会利用自身经历来回答这些特定的设计问题。设计模式是代码重用的扩展。

2. 你能说出在标准的]]></description><category></category></item><item><title><![CDATA[java设计模式之适配器模式]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47442095</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47442095</guid><author>u013812939</author><pubDate>Wed, 12 Aug 2015 11:47:13 +0800</pubDate><description><![CDATA[概述：将一个已存在的类/接口进行复用,将其转换/具体化成客户希望的另外的一个类/接口。
适应性：
      1.你想使用一个已经存在的类，而它的接口不符合你的需求。


      2.你想创建一个可以复用的类，该类可以与其他不相关的类或不可预见的类（即那些接口
      可能不一定兼容的类）协同工作。


      3.（仅适用于对象Adapter）你想使用一些已经存在的]]></description><category></category></item><item><title><![CDATA[java设计模式之原型模式]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47441209</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47441209</guid><author>u013812939</author><pubDate>Wed, 12 Aug 2015 11:06:39 +0800</pubDate><description><![CDATA[概述：用原型实例指定创建对象的种类，并通过原型拷贝创建新的对象
适应场景：


          1.当一个系统应该独立于它的产品创建、构成和表示时。


          2.当要实例化的类是在运行时刻指定时，例如，通过动态装载。


          3.为了避免创建一个与产品类层次平行的工厂类层次时。


         4.当一个类的实例只能有几个不同状态]]></description><category></category></item><item><title><![CDATA[java设计模式之建造者模式]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47440757</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47440757</guid><author>u013812939</author><pubDate>Wed, 12 Aug 2015 10:51:59 +0800</pubDate><description><![CDATA[概述： 将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。
适应性：
          1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。


           2.当构造过程必须允许被构造的对象有不同的表示时。
思路：
           1.Builder

                为创建一个Product对象的各]]></description><category></category></item><item><title><![CDATA[java设计模式之观察者模式]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47426783</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47426783</guid><author>u013812939</author><pubDate>Tue, 11 Aug 2015 21:27:35 +0800</pubDate><description><![CDATA[概述：定义对象间的一对多的依赖关系，当一个对象发生改变时，所以依赖它的对象得到通知并作出相应更新。
适应场景：用于一对多依赖关系对象间，当被依赖者变化时，通知依赖者全部进行更新，被依赖者（Subject）应该有添加/删除依赖者（Observer）的方法，且可以把添加的依赖者放到一个容器中，且有一个方法去通知依赖者进行更新（update()）。
思想：建立目标(Subject)和观察者(Obse]]></description><category></category></item><item><title><![CDATA[ListView性能优化问题总结]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47360233</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47360233</guid><author>u013812939</author><pubDate>Sat, 08 Aug 2015 17:27:58 +0800</pubDate><description><![CDATA[我们经常会遇到 ListView滑动的时候出现卡顿现象，这样我们该如何解决呢？我们可以从以下几个方面进行优化：


1.重用convertView，每次滑动list，view回收，当需要显示新的item时候，可以重用回收器的view。
2.避免在getView中重复调用findViewById，使用静态ViewHolder，然后保存在View的 tag中。
3.利用好View Type，]]></description><category></category></item><item><title><![CDATA[java二叉树非递归之中序遍历]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47295311</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47295311</guid><author>u013812939</author><pubDate>Wed, 05 Aug 2015 12:29:32 +0800</pubDate><description><![CDATA[思路：使用辅助栈改写递归程序，中序遍历没有前序遍历好写，其中之一就在于入栈出栈的顺序和限制规则。我们采用「左根右」的访问顺序可知主要由如下四步构成。
步骤：
1.首先需要一直对左子树迭代并将非空节点入栈
2.节点指针为空后不再入栈
3.当前节点为空时进行出栈操作，并访问栈顶节点
4.将当前指针p用其右子节点替代
步骤2,3,4对应「左根右」的遍历结构，只是此时的步骤2取的左值为空。
]]></description><category></category></item><item><title><![CDATA[java二叉树非递归之前序遍历]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47294719</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47294719</guid><author>u013812939</author><pubDate>Wed, 05 Aug 2015 12:14:41 +0800</pubDate><description><![CDATA[思路：采用栈来实现非递归遍历
步骤：
1.对root进行异常处理
2.将root压入栈
3.循环终止条件为栈s为空，所有元素均已处理完
4.访问当前栈顶元素(首先取出栈顶元素，随后pop掉栈顶元素)并存入最终结果
5.将右、左节点分别压入栈内，以便取元素时为先左后右。
6.返回最终结果



/**
 * Definition for a binary tree node.
]]></description><category></category></item><item><title><![CDATA[OSI七层模型作用]]></title><link>https://blog.youkuaiyun.com/u013812939/article/details/47292545</link><guid>https://blog.youkuaiyun.com/u013812939/article/details/47292545</guid><author>u013812939</author><pubDate>Wed, 05 Aug 2015 10:21:36 +0800</pubDate><description><![CDATA[看图详解：


-----------各层作用---------------------------------------------------------------------------------------------------------------------------------
第一层： 物理层  ---------以二进制数据形式在物理媒体上传输数据 ISO21]]></description><category></category></item></channel></rss>