<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[mockingbirds的专栏]]></title><description><![CDATA[每天进步一点点]]></description><link>https://blog.youkuaiyun.com/mockingbirds</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mockingbirds]]></copyright><item><title><![CDATA[Android事件传递流程]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/80376251</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/80376251</guid><author>mockingbirds</author><pubDate>Sat, 19 May 2018 17:49:41 +0800</pubDate><description><![CDATA[启动服务

在系统启动时候，会启动多个服务，其中包括InputManagerService



inputManager = new InputManagerService(context);

看看InputManagerService构造方法



public InputManagerService(Context context) {
        this.mContext = co...]]></description><category></category></item><item><title><![CDATA[Android耳机拔插事件流程]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/80293566</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/80293566</guid><author>mockingbirds</author><pubDate>Sat, 12 May 2018 18:00:34 +0800</pubDate><description><![CDATA[Android所有的input设备都会在/dev/input目录下生成对应的设备节点，一旦有任何输入事件产生，便会将事件写到这些节点下，同时对于外部输入设备（鼠标键盘等）的插拔还会引起这些节点的创建和删除 
  使用adb 命令可以查看当前手机插入的耳机状态,命令为:adb shell cat /sys/class/switch/h2w/state]]></description><category></category></item><item><title><![CDATA[SystemUI流程分析]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/79336960</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/79336960</guid><author>mockingbirds</author><pubDate>Mon, 19 Feb 2018 14:10:59 +0800</pubDate><description><![CDATA[在前面的Android中getSystemService流程中，我们知道在系统启动的时候，会启动一些系统的必要服务，SystemUI也是在SystemServer#startOtherServices这里启动的



SystemUI启动时机

static final void startSystemUi(Context context, WindowManagerService windowM...]]></description><category></category></item><item><title><![CDATA[Android O版本power按键锁屏亮屏流程]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/79336908</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/79336908</guid><author>mockingbirds</author><pubDate>Mon, 19 Feb 2018 13:44:10 +0800</pubDate><description><![CDATA[今天记录下跟踪的Android O版本，power键按下流程，包括关机，锁屏，亮屏流程，没有太多新的扩展，只是做了源码流程的记录分析，若有异议，欢迎提出，下面开始


power按键传递

对于按下power按键，在fwk中首先会传递到PhoneWindowManager#dispatchUnhandledKey

@Override
public KeyEvent dispatchUnha...]]></description><category></category></item><item><title><![CDATA[Ubuntu16.04编译Android8.0系统源码]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/79188182</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/79188182</guid><author>mockingbirds</author><pubDate>Sun, 28 Jan 2018 18:11:09 +0800</pubDate><description><![CDATA[源码下载

源码下载请参考下面链接 
清华大学镜像站



安装openjdk

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
$ sudo apt-get install openjdk-8-jre




安装编译依赖的库文件

首先需要更新软件源，这里使用阿里源

编辑如下文件：
sudo gedit /etc/apt/...]]></description><category></category></item><item><title><![CDATA[WiFi的打开流程]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/78993255</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/78993255</guid><author>mockingbirds</author><pubDate>Sun, 07 Jan 2018 15:06:27 +0800</pubDate><description><![CDATA[上一篇学习了StateMachine原理，在此基础上，继续分析系统Wifi相关服务的开启流程，以及wifi的打开流程，下面开始
Wifi相关服务的启动我们都知道每次系统开机以后，默认wifi相关的功能都可以使用了，那么肯定有在系统启动的时候，有启动wifi相关的服务，是在SystemServer中启动的，如下： 
 
以上，WIFI_SERVICE_CLASS是WifiService的全类名priv]]></description><category></category></item><item><title><![CDATA[Android StateMachine学习]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/78988672</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/78988672</guid><author>mockingbirds</author><pubDate>Sat, 06 Jan 2018 20:05:22 +0800</pubDate><description><![CDATA[2018年01月06日14:33:58，西安下了三天的大雪了，上班上学上街都不方便，索性在家看看代码吧，已经好久没有更新博客了，是因为之前的笔记本配置实在跟不上了，2018年元旦，狠下心来新买了一个某米的笔记本，除了存储256G不够使用(单单下载一套Android代码，编译的时候就没有空间了，可怜的只剩下40M了，只是中通快递很不给力，扩展的硬盘还在路上。。。。。）废话不多说了，下面进入正题
此次关]]></description><category></category></item><item><title><![CDATA[使用requests爬取豆瓣电影top250]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/72850237</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/72850237</guid><author>mockingbirds</author><pubDate>Sat, 03 Jun 2017 18:51:09 +0800</pubDate><description><![CDATA[今天使用requests获取豆瓣电影top250的内容，先说下思路
表设计
获取每一页的内容
获取当前页每一部电影对应的链接 
获取所有页的url
    for i in range(10):
        top_url = "https://movie.douban.com/top250?start={0}&filter=".format(i*25)获取前页每一部电影对应的链接all_tit]]></description><category></category></item><item><title><![CDATA[使用scrapy爬取拉勾网职位信息]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/72808709</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/72808709</guid><author>mockingbirds</author><pubDate>Tue, 30 May 2017 18:02:58 +0800</pubDate><description><![CDATA[今天使用scrapy实现了一个爬取拉勾网上的职位信息字段，并保存到数据库的爬虫，先看下效果： 
 
导出json格式如下： 
创建Spider之前在创建spider的时候，都是使用有genspider默认创建的spider类型，可以通过下面命令查看当前scrapy支持哪些类型的spider 
 
下面创建crawl类型的spiderscrapy genspider -t crawl lagou ww]]></description><category></category></item><item><title><![CDATA[使用requests和scrapy模拟知乎登录]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/72794611</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/72794611</guid><author>mockingbirds</author><pubDate>Mon, 29 May 2017 13:46:31 +0800</pubDate><description><![CDATA[获取登录传递的参数在正式开始之前，首先需要做的就是获取登录知乎时候传递的参数 
https://www.zhihu.com/ 
可以看到，这里当登录的时候，是传递红色部分标注出来的四个参数的,并且访问的是https://www.zhihu.com/login/phone_num地址，但是这里验证码需要用户点击倒立的字，目前我还没有办法，但是可以使用手机端登录看看，其实是让用户输入登录验证码的，因此，]]></description><category></category></item><item><title><![CDATA[正则表达式基础]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/72078407</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/72078407</guid><author>mockingbirds</author><pubDate>Sun, 14 May 2017 21:32:39 +0800</pubDate><description><![CDATA[正则表达式是学习python爬虫的必要条件，所以需要先做好准备打好表达式的基础，开始吧# -*- coding: utf-8 -*-import reline = "helloworld123"
# ^表示以什么开头
# .表示任意字符
# *表示一个字符可以重复任意零次或多次
# $符号表示结尾字符regexStr = "^h.*3$"if re.match(regexStr, line):]]></description><category></category></item><item><title><![CDATA[scrapy环境搭建]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/71809358</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/71809358</guid><author>mockingbirds</author><pubDate>Sat, 13 May 2017 14:50:24 +0800</pubDate><description><![CDATA[在ubuntu16.04下搭建scrapy环境
安装pip
sudo apt-get install python-pip
安装Scrapy需要的依赖库
sudo apt-get install python-dev
sudo apt-get install libevent-dev
sudo apt-get install libssl-dev
安装Scrapy
sudo pip install]]></description><category></category></item><item><title><![CDATA[使用Requests+xpath实现简单的数据爬取]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/71022785</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/71022785</guid><author>mockingbirds</author><pubDate>Sun, 30 Apr 2017 14:29:53 +0800</pubDate><description><![CDATA[今天使用Requests+xpath实现简单的数据爬取，获取的是优快云博客上的标题，发表时间，和阅读次数下载PyCharm这里我使用的是PyCharmhttp://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC 
关于PyCharm的使用方法，和AndroidStudio是一样的，这]]></description><category></category></item><item><title><![CDATA[python正则表达式re模块语法]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/68957146</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/68957146</guid><author>mockingbirds</author><pubDate>Mon, 03 Apr 2017 11:07:35 +0800</pubDate><description><![CDATA[使用字符串匹配实现对于简单的匹配查找，可以通过字符串匹配实现，比如：查找以”hello”开头的字符串 
def find_Hello(filename):
    f = open(filename)    for line in f:
        if line.startswith('hello'):
            print line
    f.close()
find_Hel]]></description><category></category></item><item><title><![CDATA[Python学习之Requests库]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/68951014</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/68951014</guid><author>mockingbirds</author><pubDate>Sun, 02 Apr 2017 18:13:11 +0800</pubDate><description><![CDATA[python中的Requests库是封装好的用来请求http并返回对应结果的python用具初识Requests库
官方文档 
http://cn.python-requests.org/zh_CN/latest/
代码地址 
https://github.com/kennethreitz/requests
Requests环境准备
安装pip 
https://pypi.python.org/py]]></description><category></category></item><item><title><![CDATA[python文件操作]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/65930764</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/65930764</guid><author>mockingbirds</author><pubDate>Sun, 26 Mar 2017 16:13:50 +0800</pubDate><description><![CDATA[python常用读写文件函数python打开文件#文件打开方法
open(name,[,mode[buf]])
// name指定文件路径
// mode指定文件的打开方式，读写，还是只读
// buf指定缓冲区的大小
上面提到文件打开方式，有如下几种
  mode
  说明
  注意  r
  只读方式打开
  文件必须存在
  w
  只写方式打开
  文件不存在则创建文件，文件存在则清空文件内]]></description><category></category></item><item><title><![CDATA[python装饰器]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/64950241</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/64950241</guid><author>mockingbirds</author><pubDate>Sat, 25 Mar 2017 08:46:25 +0800</pubDate><description><![CDATA[python闭包理解与使用闭包：内部函数中对enclosing作用域的变量进行引用，看下面代码：passline = 60def checkFun(val):
    print("%x" %id(val))
    if val > passline:
        print('pass')
    else:
        print('fail')
    def in_fun():]]></description><category></category></item><item><title><![CDATA[python中的错误和异常处理]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/64501329</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/64501329</guid><author>mockingbirds</author><pubDate>Tue, 21 Mar 2017 21:53:31 +0800</pubDate><description><![CDATA[使用try except处理异常try:
    print 10 / 0
except ZeroDivisionError, e:
    print "catched a ValueError:",e上面的代码中，被除数是0，会引发ZeroDivisionError，运行上面的代码：catched a ValueError: integer division or modulo by zero使]]></description><category></category></item><item><title><![CDATA[python学习(三)面向对象]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/59641983</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/59641983</guid><author>mockingbirds</author><pubDate>Sat, 04 Mar 2017 14:23:13 +0800</pubDate><description><![CDATA[python面向对象继承class Person(object):
    '''
    classdocs
    '''
    def __init__(self,name):
        '''
        Constructor
        '''
        self.name = nameclass Student(Person):    def __init__(s]]></description><category></category></item><item><title><![CDATA[python学习(二)函数]]></title><link>https://blog.youkuaiyun.com/mockingbirds/article/details/58670450</link><guid>https://blog.youkuaiyun.com/mockingbirds/article/details/58670450</guid><author>mockingbirds</author><pubDate>Thu, 02 Mar 2017 19:53:50 +0800</pubDate><description><![CDATA[创建一个函数通过def关键字可以创建一个函数def addNumber(firstNumber,secondNumber) :
    return firstNumber + secondNumberprint "addNumber(2, 3) = "+str(addNumber(2, 3))    #输出： addNumber(2, 3) = 5另外系统为我们提供了很多函数，我们可以在命令行下通]]></description><category></category></item></channel></rss>