<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Stackvoid小菜]]></title><description><![CDATA[关注Android开发]]></description><link>https://blog.youkuaiyun.com/drunkcello</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; drunkcello]]></copyright><item><title><![CDATA[Android App 性能优化实践]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/43406909</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/43406909</guid><author>drunkcello</author><pubDate>Mon, 02 Feb 2015 12:44:23 +0800</pubDate><description><![CDATA[原文链接： http://stackvoid.com/performance-tuning-on-android/

本文记录了Android App优化需要用到的工具和以及在实践中的Tips。也算对我这半年来部分工作的总结。


工具

Hierarchy Viewer 是 Android SDK 自带的 Layout 嵌套检查工具，以可视化的布局角度直观获取
 Layout 布]]></description><category></category></item><item><title><![CDATA[开放授权协议OAuth2.0简介]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/43309871</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/43309871</guid><author>drunkcello</author><pubDate>Fri, 30 Jan 2015 18:01:34 +0800</pubDate><description><![CDATA[原文地址： http://stackvoid.com/introduce-to-oath2.0/




可能你跟我一样，使用过各种第三方开放授权库(如在你的 APP 中获取 QQ 照片或微博评论等)来获取用户的一些资源，今天跟大家总结分享一下开放授权(OAuth2.0，1.0太复杂已经被弃用)的概念和原理，在以后使用开放授权SDK时能快速高效完成。



OAuth解决了什么问]]></description><category></category></item><item><title><![CDATA[用户体验很棒的Git学习网站]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/42459501</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/42459501</guid><author>drunkcello</author><pubDate>Tue, 06 Jan 2015 15:09:22 +0800</pubDate><description><![CDATA[原文地址：http://stackvoid.com/interactive-git-tutorials/




Git 是一个强大的版本控制工具，但学起来真的好枯燥、很痛苦；但你又必须得熟悉这个工具，因为它是当今软件开发中不可缺少的一环。

本文就跟大家分享3个免费的交互式 Git 学习网站，这几个交互式学习网站使得学习 Git 变得生动活泼起来，希望能帮助你尽快进入 Git 的世]]></description><category></category></item><item><title><![CDATA[如何备份Github博客至GitCafe]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/42006881</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/42006881</guid><author>drunkcello</author><pubDate>Thu, 18 Dec 2014 16:14:18 +0800</pubDate><description><![CDATA[原文链接：http://stackvoid.com/how-to-transfer-github-pages-to-gitcafe/




开通博客半年多了，一直将博客托管到 Github 上，使用 Github Pages 的免费服务；最近发现一个令人不安的事实，我的博客在其他省份解析的很慢，通过 CNZZ 和 Google Analytics 发现有些时候博客打开速度慢出翔，当时就]]></description><category></category></item><item><title><![CDATA[解决Android SDK 下载太慢]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/41958727</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/41958727</guid><author>drunkcello</author><pubDate>Tue, 16 Dec 2014 12:37:07 +0800</pubDate><description><![CDATA[1、打开android sdk manager

2、打开tool->options，如图所示




3、将Proxy Settings 里的HTTP Proxy Server和HTTP Proxy Port分别设置成mirrors.neusoft.edu.cn和80

将Others中的Force https://...sources to be fetched using ]]></description><category></category></item><item><title><![CDATA[Stackoverflow 打开慢或样式(CSS)无法正常显示问题]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/41941769</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/41941769</guid><author>drunkcello</author><pubDate>Mon, 15 Dec 2014 11:37:38 +0800</pubDate><description><![CDATA[原文链接：http://stackvoid.com/stackoverflow-css-down/




最近使用 stackoverflow 超级不爽，加载慢不说 样式还刷不出来，极大影响工作效率。



查了下原因，原来是stackoverflow网站指向 CloudFlare 这个牛逼的 CDN，但是国内此 CDN 被墙了，so...

该怎么解决呢？网上搜到一个以备]]></description><category></category></item><item><title><![CDATA[使用 Git 生成标准 Patch]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/41892653</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/41892653</guid><author>drunkcello</author><pubDate>Fri, 12 Dec 2014 13:14:52 +0800</pubDate><description><![CDATA[源地址：http://stackvoid.com/how-to-use-git-generate-patch/




发布给别的厂商的代码，随着 Bug 的解决，需要即使通知厂商，这时候 Patch 就大显身手了。

今天跟大家分享总结如何快速生成一个标准的Git可以识别的Patch。

1.初始化git环境

使用


git init

git add * /]]></description><category></category></item><item><title><![CDATA[Android ListView 优化最佳实践]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/41825691</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/41825691</guid><author>drunkcello</author><pubDate>Tue, 09 Dec 2014 16:39:57 +0800</pubDate><description><![CDATA[原文地址链接：http://stackvoid.com/list-view-optimization-best-practice-android/




我有篇博客教大家如何利用 convertView 以及 viewHolder(static) 改善 ListView 卡顿情况；但是在 ListView
 加载大量复杂布局和图片的时候，即使使用了 convertView 和 vie]]></description><category></category></item><item><title><![CDATA[bluedroid源码分析之ACL包发送和接收（二）]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/41118055</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/41118055</guid><author>drunkcello</author><pubDate>Fri, 14 Nov 2014 14:11:26 +0800</pubDate><description><![CDATA[更多内容请参照我的个人站点： http://stackvoid.com/


上一节讲了数据流入口，本文分析L2CAP的处理函数。

L2CAP层的处理

我们的音乐数据，通过 L2CAP 入口函数 l2c_data_write 的层层“考验”，已经顺利进入到 L2CAP 里了，下面我们来看看 L2CAP 层具体是怎么处理数据的。

首先我们进入了 L2CAP 层的状态机。
]]></description><category></category></item><item><title><![CDATA[bluedroid源码分析之ACL包发送和接收（一）]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/41044933</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/41044933</guid><author>drunkcello</author><pubDate>Wed, 12 Nov 2014 15:54:22 +0800</pubDate><description><![CDATA[更多内容请参照我的个人站点： http://stackvoid.com/


ACL 链路在 Bluetooth 中非常重要，一些重要的应用如 A2DP， 基于 RFCOMM 的应用，BNEP等都要建立 ACL 链路，发送/接收ACL 包。今天跟大家一起来分析 ACL 包发送/接收流程，以及涉及到的重要 command/event。


ACL包发送

下面的图(点击大图)是各种应]]></description><category></category></item><item><title><![CDATA[Android数据适配器(Adapter)优化：使用高效的ViewHolder]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/40042385</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/40042385</guid><author>drunkcello</author><pubDate>Mon, 13 Oct 2014 11:47:34 +0800</pubDate><description><![CDATA[在使用Listview或GridView的时候，往往需要自定义数据适配器，一般都要覆写getView()，在该方法中有一个convertView参数，该参数就是用来加载数据时的View。

初学者简单但低效的方式

 1 public View getView(int position, View convertView, ViewGroup parent) {
 2  
 3  View]]></description><category></category></item><item><title><![CDATA[Android应用中埋点监控的思考与设计]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/39965481</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/39965481</guid><author>drunkcello</author><pubDate>Fri, 10 Oct 2014 17:08:55 +0800</pubDate><description><![CDATA[一款Android商业应用上线后，最关心的莫过于用户使用哪个模块比较频繁，哪个模块使用人群较少，产品可以根据这些数据来修正app以后的发展方向，使产生最大的商业价值。

通过埋点监控，我们可以深入业务的每一个细节，产生的用户行为可以通过所埋的点累计次数并将这些数据发送到数据中心，通过数据分析师就能给产品]]></description><category></category></item><item><title><![CDATA[Android 事件分发机制详解]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/39892761</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/39892761</guid><author>drunkcello</author><pubDate>Wed, 08 Oct 2014 14:10:31 +0800</pubDate><description><![CDATA[更多内容请参照我的个人站点： http://stackvoid.com/

网上很多关于Android事件分发机制的解释，大多数描述的都不够清晰，没有吧来龙去脉搞清楚，本文将带你从Touch事件产生到Touch事件被消费这一全过程作全面的剖析。

产生Touch事件

这部分牵扯到硬件和Linux内核部分；我们简单讲述一下这部分内容，如果有兴趣的话可以参考这篇文章。

传递Touc]]></description><category></category></item><item><title><![CDATA[链表相交（及相交的节点）、判断链表是否有环问题]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/8965739</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/8965739</guid><author>drunkcello</author><pubDate>Thu, 23 May 2013 16:06:04 +0800</pubDate><description><![CDATA[链表相交问题
给出俩个单向链表的头指针，比如h1，h2，判断这俩个链表是否相交。



解决方案：
1.先判断链表是否有环
2.没有环，两个链表都遍历到最后的节点，判断这连个节点是否相同。
3.有环，必定相交。
struct Node {
  int data;
  int Node *next;
};
// if there is no cycle.
int isJoinedS]]></description><category></category></item><item><title><![CDATA[在二元树中找出和为某一值的所有路径]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/8964041</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/8964041</guid><author>drunkcello</author><pubDate>Thu, 23 May 2013 10:45:07 +0800</pubDate><description><![CDATA[题目：在二元树中找出和为某一值的所有路径
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如输入整数22 和如下二元树
          10
        / \
       5  12
      / \
     4   7
则打印出两条路径：10, 12 和10, 5, 7。
思路]]></description><category></category></item><item><title><![CDATA[设计包含min函数的栈]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/8956640</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/8956640</guid><author>drunkcello</author><pubDate>Tue, 21 May 2013 17:55:56 +0800</pubDate><description><![CDATA[要求
定义栈的数据结构，要求添加一个min 函数，能够得到栈的最小元素。 
要求函数min、push 以及pop 的时间复杂度都是O(1)。


解法1：


使用一个辅助栈来保存最小元素，这个解法简单不失优雅。设该辅助栈名字为minimum stack，其栈顶元素为当前栈中的最小元素。这意味着




要获取当前栈中最小元素，只需要返回minimum stack的栈顶元]]></description><category></category></item><item><title><![CDATA[ubuntu 12.10 关闭图形界面]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/8948857</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/8948857</guid><author>drunkcello</author><pubDate>Mon, 20 May 2013 09:31:45 +0800</pubDate><description><![CDATA[[注意]改GRUB 的配置文件(不建议直接改 grub.conf) 

    file：/etc/default/grub 

        GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

替换为  GRUB_CMDLINE_LINUX_DEFAULT="text"

保存后 sudo update-grub 重启即可]]></description><category></category></item><item><title><![CDATA[二叉树-经典问题复习]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/8920843</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/8920843</guid><author>drunkcello</author><pubDate>Fri, 17 May 2013 17:27:13 +0800</pubDate><description><![CDATA[节点定义

typedef struct Btree {
    int v;
    struct Btree *left;
    struct Btree *right;
}*Btree;



插入节点

Btree insertNode(Btree root, int value) {
    Btree ptr=root;
    Btree tmpNode;]]></description><category></category></item><item><title><![CDATA[初探C++中的虚函数]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/8876382</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/8876382</guid><author>drunkcello</author><pubDate>Thu, 02 May 2013 16:04:51 +0800</pubDate><description><![CDATA[虚函数的由来和使用：
http://www.cnblogs.com/fangyukuan/archive/2010/05/30/1747449.html



虚函数的定义要遵循以下重要规则： 


　　1.如果虚函数在基类与派生类中出现，仅仅是名字相同，而形式参数不同，或者是返回类型不同，那么即使加上了virtual关键字，也是不会进行滞后联编的。 

　　2.只有类的成员函]]></description><category></category></item><item><title><![CDATA[C++类的特殊数据成员]]></title><link>https://blog.youkuaiyun.com/drunkcello/article/details/8876168</link><guid>https://blog.youkuaiyun.com/drunkcello/article/details/8876168</guid><author>drunkcello</author><pubDate>Thu, 02 May 2013 15:32:33 +0800</pubDate><description><![CDATA[一、const
 数据成员
    const 类型的数据成员具有只读属性,
 在构造函数内进行初始化是不允许的.
 
   要初始化 const 型的数据成员, 必须通过初始化表达式来进行初始化, 一经初始化, 其值确定, 不能再被修改, 通过初始化表达式形式如下:


            A(int n = 0):num(n) { }       //使用初始化表达式对co]]></description><category></category></item></channel></rss>