在Github上使用Hexo搭建博客并配置tranquilpeak主题(原)

该文章将会引导大家使用Hexo搭建私人博客,并配置tranquilpeak主题,最终效果如此,并发布到Github上,请严格按照以下顺序进行操作。 创建Hexo工程 导入tranquilpeak主题 必要配置项 1根目录的_config文件配置 2tranquilpeak目录的_config...

2018-02-07 14:03:24

阅读数:94

评论数:0

Android的onTouchEventon、dispatchTouchEvent、InterceptTouchEvent按键消息派发流程(原)

Android自定义View时按键消息流程是绕不过去的知识点,其中又涉及到三大方法onTouchEvent、dispatchTouchEvent、onInterceptTouchEvent,他们之间的关系如何?优先级如何?出现矛盾时又会采取怎样的处理方式,我们这一节来做一下测试。 1.Dem...

2018-02-01 14:27:59

阅读数:52

评论数:0

算法系列之--Kotlin的算法实战比较(原)

前面几节我们介绍了各种算法的具体实现,这一节我们分别对以上算法进行性能测试。         测试方法如下,分别测试n=1000,10000,100000(十万),500000(五十万),1000000(一百万),3000000(三百万)情况下的运算效率,随机数产生的范围是当前数据量的十倍,比如1...

2017-09-14 16:18:33

阅读数:632

评论数:0

算法系列之--Javascript和Kotlin的快速排序算法(原)

上一节我们学习了基数排序算法,这一节来学习快速排序算法 介绍         从这个快速排序算法的名字就可以看出他非常快,有多块呢?在平均状况下,排序n个项目要O(n log n)次比较。在最坏状况下则需要O(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(n log ...

2017-09-14 11:02:23

阅读数:193

评论数:0

算法系列之--Javascript和Kotlin的基数排序算法(原)

上一节我们学习了堆算法,这一节来学习基数算法 介绍         之前的所有算法都是基于比较的算法,而基数排序算法不同,他不是基于比较的,而是将整形的数据拆分为不同的位数分别进行排序,适用于数列中的数字相差不大的情况,其具体操作步骤如下:         1. 将所有数字按照最后一位数的...

2017-09-14 10:59:17

阅读数:142

评论数:0

算法系列之--Javascript和Kotlin的堆排序算法(原)

上一节我们学习了希尔排序算法,这一节来学习堆排序算法 介绍         堆排序算法是基于堆这种数据结构设计的算法,理解了堆的概念就明白了堆算法的原理,因此我们简单介绍一下堆的数据结构。         堆的结构主要有以下几个特征:         1. 堆是由一个个小堆构成的,每个堆中...

2017-09-14 10:55:31

阅读数:151

评论数:0

算法系列之--Javascript和Kotlin的希尔排序算法(原)

上一节我们学习了插入算法,这一节来学习希尔排序算法 介绍         希尔排序是在插入排序基础上优化而来的,其思想就是利用插入排序最优时只需要O(n)的复杂度,我们可以对序列做调整,使其尽可能靠近最优序列,然后不断运算插入算法。详细步骤如下:         1. 挑选合适的步长   ...

2017-09-14 10:39:12

阅读数:144

评论数:0

算法系列之--Javascript和Kotlin的插入算法(原)

上一节我们学习了选择算法,这一节来学习插入算法 介绍         插入算法与选择算法类似,只不过“方向相反”,他的特点就是依次选择当前索引右边的元素,有序的插入当前索引左边的序列中,步骤如下:         1. 从第一个元素开始,该元素可以认为已经被排序         2. 取出...

2017-09-14 10:34:57

阅读数:114

评论数:0

算法系列之--Javascript和Kotlin的选择算法(原)

上一节我们学习了冒泡算法,这一节来学习选择算法 介绍         选择排序与冒泡类似,都是入门级的排序算法,效率也与冒泡相同,都是O(n^2),算法步骤如下:         1. 寻找当前序列中最小的数的索引         2. 找到最小值索引后与第一位元素交换位置        ...

2017-09-13 17:00:48

阅读数:139

评论数:0

算法系列之--Javascript和Kotlin的冒泡算法(原)

介绍         冒泡算法基本上是IT从业人员接触到的第一个算法,其原理就是依次对比相邻元素,大的放在后面,当全部list遍历之后,该list的最大值就会被置换到list的最后,详细步骤如下:          1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。          2...

2017-09-13 16:54:14

阅读数:187

评论数:0

算法系列简单研究(原)

算法是一个工程师最基础的素养之一,就好比语言、框架一样,你不会这些知识,可能并不影响你日常工作的解BUG过程,但是如果你不去了解这些"抽象"的知识,那么可能整个职业生涯都只是解解BUG而已。         或者说,算法、框架、语言的研究,决定了一个程序员能到达的层次。    ...

2017-09-13 16:46:35

阅读数:149

评论数:0

Html5的缓存小结(原)

Html5的缓存小结,以后可能会经常使用这种思维导图的方式来做一些简单知识点的梳理/总结。

2017-08-30 10:06:51

阅读数:154

评论数:0

Dagger2教程六之Component的组织方法(原)

为了介绍Dagger2的使用,我们搭建了一个Demo来逐步分析,大家可以在这里下载源码(这个源码与之前的五个小节源码不同)(https://github.com/dushaofeng/DaggerDemo2.git)。         上一节我们介绍了《Dagger2教程五之单例模式》,这一节我们...

2017-05-22 14:44:21

阅读数:1835

评论数:2

Dagger2教程五之单例模式(原)

为了介绍Dagger2的使用,我们搭建了一个Demo来逐步分析,大家可以在这里下载源码(https://github.com/dushaofeng/DaggerDemo.git)。         上一节我们介绍了《Dagger2教程四之多构造方法的情况》,这一节我们来介绍Dagger2中的单例模...

2017-05-22 14:24:12

阅读数:1141

评论数:0

Dagger2教程四之多构造方法的情况(原)

为了介绍Dagger2的使用,我们搭建了一个Demo来逐步分析,大家可以在这里下载源码(https://github.com/dushaofeng/DaggerDemo.git)。         上一节我们介绍了《Dagger2教程二之基础使用》这一节我们来讨论如果注入类的构造方法中的参数不同或...

2017-05-22 14:08:24

阅读数:1166

评论数:2

Dagger2教程三之构造方法带参数的情况(原)

为了介绍Dagger2的使用,我们搭建了一个Demo来逐步分析,大家可以在这里下载源码(https://github.com/dushaofeng/DaggerDemo.git)。         前面一节《Dagger2教程二之基础使用篇》介绍了Dagger2最简单的使用场景,但是在结尾我们遇到...

2017-05-22 13:55:04

阅读数:2822

评论数:0

Dagger2教程二之基础使用(原)

为了介绍Dagger2的使用,我们搭建了一个Demo来逐步分析,大家可以在这里下载源码(https://github.com/dushaofeng/DaggerDemo.git)。         上一节我们介绍了《Dagger2教程一之配置篇》,这一节我们来介绍Dagger2的具体使用方法。 ...

2017-05-22 13:38:48

阅读数:1062

评论数:2

Dagger2教程一之配置(原)

既然打开了这篇文章,那么关于为什么使用Dagger2或者Dagger2的作用就不再多说,我们直接来动手配置Dagger2。         我们只介绍AndroidStudio的配置方法,至于依旧使用Eclipse的同学,请绕道。         我们打开模块的(不是全工程的)build.grad...

2017-05-22 13:25:12

阅读数:759

评论数:1

Android Studio引入Library后运行报"Resources$NotFoundException"的解决办法(原)

【前提条件】         Eclipse导出的Library工程,其中的src目录被编译为jar,然后将此Library合入AndroidStudio中,编译(build)可以通过,但是运行(run)报错,报错信息:         android.content.res.Resources$...

2017-02-27 14:25:28

阅读数:1640

评论数:2

Android手机使用Fiddler方法介绍(原)

本节主要介绍如何利用Fiddler工具抓取Android发送的HTTP和HTTPS的报文

2016-11-16 15:56:09

阅读数:2277

评论数:0

高通平台ModemBindingPolicyHandler和ModemBindingPolicyHandler作用(原)

做高通平台双卡项目的时候,高通在Telephony模块中添加了ModemBindingPolicyHandler和ModemStackController两个对象,今天我们来看一下他们的作用。由于这两个对象都是高通自己添加的,因此不方便贴出太多的源码,我们简要看一下其作用和原理。        ...

2016-02-19 16:46:09

阅读数:1420

评论数:0

Android运营商名称显示之PLMN与SPN显示规则(原)

前面的两节分别介绍了PLMN和SPN的读取方法,那么在锁屏、状态栏、通知栏这些地方的运营商名称究竟是来自于PLMN呢?还是来自于SPN呢?         在3GPP中规定的运营商名称显示规则如下:         1、名称可以为SPN或PLMN         2、如果没有SPN文件,那么就显示...

2016-02-17 20:06:04

阅读数:6014

评论数:2

Android运营商名称显示之SPN的读取(原)

SPN(Service Provider Name)就是当前发行SIM卡的运营商的名称,可以从以下两个路径获取:         1、从SIM文件系统读取         2、从配置文件读取         我们本节就来分析该字串的读取过程。 一、从SIM读取SPN过程         一...

2016-02-17 20:01:05

阅读数:8051

评论数:0

Android运营商名称显示之PLMN的读取(原)

Plmn的全称是Public Land Mobile Network(公共陆地移动网络),而在运营商显示方面主要是指当前SIM所驻留的网络,比如当中国移动的SIM(46000)如果漫游到联通的网络(46001),那么虽然当前的SIM是中国移动,但是他的Plmn就应该是中国联通。         也...

2016-02-17 19:50:50

阅读数:8592

评论数:2

Android运营商名称显示(原)

Android运营商名称的显示对用户来讲可能很少人注意到,但是对Telecomm的开发者来说,却有着不少的学问,虽然3GPP里面已经有明确的显示规则,但是在项目开发中却总能遇到各种特殊的运营商需求。在接下来的几节中我们就来对这个小小的字串显示进行分析。         Android平台的运营商名...

2016-02-17 19:41:07

阅读数:4193

评论数:0

Qualcomm平台qcril初始化及消息处理流程(原)

本节主要来介绍Qcril的初始化流程以及消息在Qcril中如何传递。 Android平台不同厂商的AP侧可以相同,但是Modem侧肯定会有很大的差异,RILC要解决一个问题就是适配不同厂商的Modem,为了达到兼容性要求,Android在AP与Modem之间搭建了RILC的框架,由不同的Modem...

2016-01-30 17:58:35

阅读数:8318

评论数:1

Android短信发送流程之多收件人发送(原)

前面的《Android短信发送流程之长短信发送》中介绍了长短信对于普通短信的区别,而对于多收件人的情况,在SmsMessageSender的queueMessage()方法中我们了解到,发送之前,将多收件人的短信进行拆分,放入"content://sms/queued"队列中,...

2015-12-12 08:54:44

阅读数:1862

评论数:0

Android短信发送流程之长短信发送(原)

从前面《Android短信发送流程之普通短信发送》流程看到,长短信与普通短信的流程从SmsManager的sendMultipartTextMessage()方法开始区分,现在我们来看长短信的流程: @SmsManager.java public void sendM...

2015-12-12 08:41:06

阅读数:2504

评论数:0

Android短信发送流程之普通短信发送(原)

我们先来看最简单的流程入手分析,即收件人只有一个,而且不是长短信的情况。 一、地址有效性检测         当点击发送按钮时,触发onClick事件: @ComposeMessageActivity.java public void onClick(Vie...

2015-12-12 08:25:59

阅读数:3858

评论数:0

Android短信发送流程(原)

在之前的《Android短信接收过程源码分析》一文中我们介绍了Android平台短信接收流程,本节我们来梳理短信发送流程。         本文的代码来自于Android L源码。         短信发送流程中,需要完成以下几件事务:             1、有效性检测           ...

2015-12-09 11:25:46

阅读数:1163

评论数:0

数据业务建立流程之发起网络连接过程(原)

经过前面这些过程,网络连接所需要的条件就全部准备就绪,接下来就是等待网络接入。         我们把网络接入过程简单分为三个阶段:         触发阶段             ----该阶段是由各种不同事件触发的,比如SIM载入完毕、PS域Attach成功、通话结束、APN改变等,该阶段的...

2015-11-03 10:47:08

阅读数:5802

评论数:5

数据业务建立流程之APN参数的激活(原)

APN参数在前面《数据业务建立流程之常规APN参数的创建》一文中已经都被创建完毕并存入mAllApnSettings的数组中,但是这些APN参数默认都是没有被Enable的,只有当APN被Enable之后,该APN才可以被使用,下面我们就来看如何将一个APN参数激活。         APN的E...

2015-11-03 10:33:28

阅读数:3743

评论数:0

数据业务建立流程之常规APN参数的创建(原)

区别于前面的紧急APN,这里的APN参数主要指常规的SIM卡APN参数,手机在上网时必须传递正确的APN参数给运营商才可以接入移动网络,而常规APN参数的创建是由监听器触发的。         前面在DcTracker初始化过程中注册了大量监听器,其中有两个监听器可以触发APN的创建过程:1、S...

2015-11-02 16:35:52

阅读数:4564

评论数:2

数据业务建立流程之DcTracker创建过程(原)

一、DcTracker介绍         DcTracker是Telephony框架中负责数据业务的核心(类似于GsmCallTracker是通话业务核心,GsmServiceStateTracker是网络CS业务的核心),所有对数据网络的请求(打开关闭数据开关、切换数据卡、修改APN...

2015-11-02 16:19:39

阅读数:6138

评论数:2

Android数据业务发起流程(原)

本节我们来介绍手机的数据网络连接建立过程。         所谓数据网络就是使用手机SIM卡上网,该上网方式需要满足两个条件:选择并激活合适的APN参数,PS域已经处于ATTACH状态。         下面我们分四节来分别介绍Android L上数据业务的发起流程。         《数据...

2015-11-02 16:03:47

阅读数:3205

评论数:0

网络连接评分机制之再谈WIFI与数据切换过程(原)

前面几节介绍了网络评分机制的运行流程,下面我们再次通过案例来梳理一下评分机制在使用过程中的体现。         用户原本在用数据上网,但是如果到了一个有WIFI的环境,并连接上了WIFI,此时用户的手机将会自动断开数据网络,这是如何做到的呢?         当用户来到WIFI环境时,如果连上了...

2015-10-08 14:26:49

阅读数:4948

评论数:7

网络连接评分机制之NetworkMonitor(原)

本节介绍一个比较特殊的流程,就是网络可用性对评分的影响。         该影响主要体现在,当一个网络连接建立时,系统将用该连接Ping一个Google的网站来判断该连接是否真的可以上网,如果不可以,那么就会扣掉该网络40分,从而可能导致该网络的评分低于其他网络评分,下面来看详细过程。 一、N...

2015-10-08 14:17:36

阅读数:6025

评论数:1

网络连接评分机制之NetworkAgent(原)

前面介绍了开机过程中各个网络提供者的初始化过程,其实就是创建自己的NetworkFactory,并将其注册到ConnectivityService。而在介绍NetworkFactory的时候,我们看到该类的官方注释中有这么一句描述: "A NetworkFactory ...

2015-10-08 14:06:32

阅读数:6111

评论数:1

网络连接评分机制之NetworkFactory(原)

在开机时,各个提供网络连接的对象需要向ConnectivityService注册自己,并把自己所提供的网络的分值告诉ConnectivityService。         为了ConnectivityService便于统一管理,每一个具备提供网络服务的对象都需要创建一个NetworkFactor...

2015-10-08 13:51:53

阅读数:5081

评论数:1

连接管理的评分机制介绍(原)

在前一节《Framework中的连接管理机制》中简单介绍了连接管理的大致框架,包括ConnectivityManager、ConnectivityService、NetworkAgent等对象之间的关系以及消息流走向,本节在这些知识的基础上介绍连接管理的核心机制,即连接管理中的评分机制。     ...

2015-10-08 11:08:50

阅读数:3301

评论数:4

Framework中的连接管理机制(原)

上一节《Wifi服务框架介绍》介绍了WIFI的大致框架,本文主要介绍连接管理中的几个重要角色,包括:NetworkInfo、NetworkAgent、ConnectivityService、ConnectivityManager等。         为了便于讨论,本文选取一个具体问题展开分析,那就...

2015-09-21 17:40:25

阅读数:13264

评论数:6

Wifi服务框架介绍(原)

本文简要介绍WIFI服务的主要框架以及运作机制。         WIFI框架主要涉及到以下几个对象:WifiService、WifiManager、WifiServiceImpl、WifiStateMachine等。下面来介绍这四个对象的内在联系。 一、WIFI服务的初始化       ...

2015-09-08 15:09:45

阅读数:10184

评论数:4

AsyncChannel的使用和原理(原)

本文主要介绍AsyncChannel的使用和内部原理。 一、AsyncChannel概述         AsyncChannel在Wifi的处理机制中被大量使用,但是可惜的是该工具是一个internal的方法,没有开放给第三方应用使用,但是该工具提供的思路很有用,可以被扩展到任意两个Hand...

2015-09-02 16:00:47

阅读数:10122

评论数:5

利用ADB Root权限破解锁屏密码(原)

本文主要介绍Android ENG版本以及Root授权过ADB进程的手机解锁方法。 一、破解方法 1.1、破解条件         该方法适用范围较为特殊,分为两种:         1、手机是ENG版本。         2、手机被ROOT,并且ADB可以直接升级为ROOT用户。  ...

2015-08-20 15:58:48

阅读数:14589

评论数:0

Android拨号盘列表加载机制(原)

本文档主要介绍Android4.4默认拨号盘界面的列表加载机制。 一、拨号列表界面概述         从DialtactsActivity所加载的布局中可以看出,在拨号界面的显示列表位置,复用了三个Fragment:PhoneFavoriteFragment、SmartDialSearchF...

2014-10-22 09:56:21

阅读数:5611

评论数:4

Telephony之TelephonyManager(原)

Telephony之TelephonyManager 一、TelephonyManager概述         TelephonyManager主要提供Telephony相关实务的处理能力,我们从他所提供的public方法来总览一下其所能提供的功能:

2014-10-20 09:49:29

阅读数:3679

评论数:1

Telephony之PhoneInterfaceManager(原)

一、概述         PhoneInterfaceManager是一个Service,在被创建时通过ServiceManager注册自己,他作为Telephony对外的接口,可以接受其他进程向Telephony的请求,我们通过该Service所继承的AIDL文件就能看到他所提供的具体功能:

2014-10-20 09:34:39

阅读数:4262

评论数:1

Telephony之TelephonyRegistry(原)

一、TelephonyRegistry概述         TelephonyRegistry的作用是检测当前Radio的状态,包括通话、短信、数据连接等状态,当这些状态发生改变时,通知所有向他注册过的客户端。也就是说,他负责Radio状态的通知。         本质上来讲,Telephon...

2014-10-17 17:37:36

阅读数:2881

评论数:1

Telephony之GsmCallTracker(原)

在前一篇《Telephony之进程与实体》中我们分析了,Application如果要发起通话相关的动作,可以通过Telephony的实体对象,也就是Phone对象来发起请求,而Phone对象就会通话相关的请求通过GsmCallTracker转发给RILJ,然后传递给Modem。         ...

2014-10-17 15:56:59

阅读数:2488

评论数:1

Telephony之进程与实体(原)

一、Telephony进程     整个Framework层的Telephony框架运行在一个叫做Phone(com.android.phone)的进程中。而这个进程是在packages\services\Telephony模块中被创建的(Android4.4平台)。并且该模块在Andr...

2014-10-17 11:29:22

阅读数:2845

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭